数据库和表的基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qiana_/article/details/81982574

1.什么是数据库:

高效的存储和处理数据的介质(介质有:磁盘和内存)

文件保存数据的缺点:

  • 文件的安全性问题
  • 文件不利于查询和对数据的管理
  • 文件不利于存放海量数据
  • 文件在程序中控制不方便

2.连接数据库:

在Linux下要使用mysql数据库,首先要开启mysqld服务(mysqld服务是数据库的服务器端):

[root@localhost http]$ service mysqld start

关闭服务
[wuqian@localhost http]$ service mysqld stop

连接mysql:

语法:mysql  [-h  主机]  -u  用户  -p 

一般主机不写就是默认本地。

[wuqian@localhost http]$ mysql -u root -p

3.数据库和表的关系

  • 所谓安装数据库服务,只是在机器上安装了一个数据库管理程序,这个程序可以管理多个数据库,数据库中可以管理多个表。
  • 数据库中的表用来保存应用中实体的数据。

4.数据库的基本操作

1.创建数据库:

create database 库名;

mysql> create database test;

当我们在创建数据库的没有指定字符集和校验规则时,系统默认字符集:utf8 ,校验规则:utf8_general_ci

默认字符集在 /etc/my.cnf中进行配置。

创建一个使用utf8字符集的数据库

mysql> create database test1 charset=utf8;

创建一个使用utf8字符集,并带校验规则的数据库

mysql> create database test2 charset=utf8 collate utf8-general_ci;

charset是指定字符集,collate是指定校验规则。

2.字符集和校验规则:

查看数据库支持的字符集:

字符集主要控制使用什么语言,utf8就可以装中文。

mysql> show charset;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |

校验规则:

1.用于区分大小写

  • utf8_general_ci :不区分大小写
  • utf8_general_bin :区分大小写

2.影响排序

区分大小写的,排序时,所有的大写字母在前,小写字母在后。

不区分大小写的,排序时,小写字母在前,其后是同名大写字母。

3.查看数据库

mysql> show databases;

显示数据库创建语句

mysql> show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

注:1 )数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

       2)/*!40100 default.... */ 这个不是注释,表示当前mysql 版本大于4.01版本,就执行这句话

4.删除数据库

mysql> DROP DATABASE IF EXISTS test;
mysql> DROP DATABASE test;

5.查看当前数据库的连接情况

mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
| 13 | root | localhost | test | Query   |    0 | NULL  | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来看看数据库连接情况

6.备份和恢复数据库

备份:

语法:mysqldump ‐u root ‐p密码 数据库名 > 数据库存放路径

将test数据库备份到当前路径下
[root@localhost wu]# mysqldump -u root -p123 test > ./test.sql
[root@localhost wu]# ls
code     Documents  Music     Public     test.sql

test.sql中的内容为我们建库,建表,导入数据的语句。

恢复数据库:

进入mysql控制台,先删除原来的库,要恢复数据库,就必须先创建一个空的数据库,最好和以前的数据库的名字一样。

mysql> drop database test;
Query OK, 0 rows affected (0.40 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| sonar              |
+--------------------+
3 rows in set (0.00 sec)

mysql> create database test;
Query OK, 1 row affected (0.02 sec)

mysql> use test;
Database changed
mysql> source /home/wuqian/test.sql

注意:备份一张表

[root@localhost test]# mysqldump -u root -p密码 数据库名 表名1 表名2 > ./testtable.bk

恢复指定的表

[root@localhost test]# source 备份的文件路径
[root@localhost test]# source ./testtable.bk

在使用source 恢复数据时,保证use对应的数据库

同时备份多个数据库:

[root@localhost Desktop]# mysqldump -u root -p密码 -B 数据库名1  数据库名2 ... > 数据库存放路径

 同时恢复多个数据库: 

mysql > source 备份的文件

 如果我们备份一个数据库时,也带上-B参数,在恢复数据库时,不需要再创建空数据库。 

7.使用库:要对表进行操作之前,需要使用库,之后的操作都是在该库下执行:

use 库名;

use test;

数据在库中的存储:

以表格的形式存储,表的一行称为一条记录,表中的一列称为一个字段。

9.删除数据库

mysql> drop database 数据库的名字;

当执行这句话后:

1. 数据库内部看不到对应的数据库

2. 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库。 

4.表的操作

1.创建表

语法:

CREATE TABLE table_name(
    field1 datatype,
    field2 datatype,
    field3 datatype,
    field4 datatype
)character set 字符集 collate 校验规则 engine 存储引擎;

1.field是字段名
2.datatype是字段的类型
3.character set 是指定字符集,如果没有指定字符集,则以所在的数据库的字符集为准
4.collate 校验规则,如果没有指定校验规则,则以所在的数据库的校验规则为准
 mysql> create  table  users (        
     ‐> id int,        
     ‐> name varchar(20),        
     ‐> school char(20) comment '学校',               
     ‐> ) character set utf8 engine MyISAM; 

不同的存储引擎,创建表的文件不一样。

当指定的引擎是MyISAM时,对应的有三个文件。.frm (表结构),.MYD(表数据),.MYI(表索引)

查看表结构:

 mysql> desc 表名;

2.修改表

添加一个字段
ALTER TABLE  tablename  ADD (column datatype [DEFAULT expr][,column datatype]...);

修改字段
ALTER TABLE  tablename  MODIfy (column datatype [DEFAULT expr][,column datatype]...);  

删除一列
ALTER TABLE  tablename  DROP (column);
mysql> alter table users add sex char(2) after name;
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> alter table users modify name varchar(10);
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> alter table users modify name varchar(10);
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> alter table users drop sex;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from users;
+------+-------+--------+
| id   | name  | school |
+------+-------+--------+
|    1 | kris  | a      |
|    1 | chris | b      |
|    1 | qiana | c      |
+------+-------+--------+
3 rows in set (0.00 sec)

5.表的增删查改

1.增加
语法:insert int table_name[(column[,column...])]  values  (value,[,value...]);

mysql> select * from users;
+------+-------+--------+
| id   | name  | school |
+------+-------+--------+
|    1 | kris  | a      |
|    1 | chris | b      |
|    1 | qiana | c      |
+------+-------+--------+
3 rows in set (0.00 sec)

mysql> insert into users values(2,'Tom','d');
Query OK, 1 row affected (0.00 sec)

注意:

  • 插入的数据与字段的数据类型相同​​。
  • 数据的大小应在规定的范围内。
  • 在value中列出的数据位置应与被加入的列的位置相对应
  • 字符和日期类型要包含在单引号中
  • 插入空值,不指定或insert into table values(null)
  • insert into table values(),(),();
  • 如果给表中所有的字段添加数据,可以不写前面的字段名称
  • 如果只给表的某几个字段赋值,则需要制定字段名

在数据插入的时候,假设主键对应的值已经存在,则会插入失败!

当主键存在冲突的时候,可以有如下处理:

  • 更新操作:更改原主键中的其他字段的值
    insert into 表名(字段列表) values(值列表) on duplicate key update 字段=新值;
  • 替换操作:replace into 表名(包含字段)  values(值列表);

2.修改

更新表中的数据

语法:update table_name set col_name=exp1,[col_name=exp2...] [where condition];

没有条件时,整表进行修改
mysql> update users set school='a';

mysql> update users set name='Grace' where id=2;

注意:

  • update 语法可以用新值更新原有表中的各列
  • set子句指定要修改哪些列和要给予哪些值
  • where子句指定应更新哪些行,如果没有where子句,则更新所有行
  • 如果需要更新多个字段,可以通过 set 字段1=值1,字段2=值2...

update还可以限制更新的数量

update 表名 set 字段=值 [where 条件] [limit 更新数量]

3.删除表中数据

语法:delete from table_name [where 条件]

mysql> delete from users where id=2;

删除表中的所有记录,表的结构还在:

mysql> delete from users;

删除表的记录和表的结构:

mysql> truncate table users;

truncate和delete的区别:

  • 效果一样,truncate更快一些
  • delete可以带where条件,删除更加灵活
  • delete可以返回被删除的记录数,而truncate返回0

4.查询

语法:select [distinct] *| {column1,column2,...} from table_name;

使用select * 查询所有的数据
select * from users;

查询某些字段
select id,name from users;

使用distinct去除重复行
select distinct school from users;

在select中可以使用表达式对查询的列进行计算
select name="chris" from users;

使用as起别名
select name as person from users;

可以使用表达式对查询的列进行计算
select name,chinese+math+english as total from student;

可以结合where,like(模糊查询)进行查询
select name,(chinese+math+english)/3 as average from student where name like 'k%';

 select中可以使用where子句进行查询过滤。

在where子句中经常使用的运算符:

使用order by子句进行排序:

语法:select column1,column2 from tablename order by column  asc|desc

使表中的数据按照column进行升序(asc)或降序(desc)排序,默认是升序排序

使用group by子句进行分组:

语法:select column1, column2, ... from tablename group by column;

猜你喜欢

转载自blog.csdn.net/Qiana_/article/details/81982574