自由的羽毛 发表于 2024-11-24 21:37:41

数据库和表的简单操作

创建数据库

CREATE DATABASE db_name ;

create_specification:
CHARACTER SET charset_name
COLLATE collation_name
分析:


[*]大写的是关键字
[*][]是可选项
[*]character set:指定数据库采用的字符集
[*]collate:指定数据库字符集的校验规则
创建数据库本质就是在/var/lib/mysql创建一个目录
创建数据库的时候,有两个编码集:

[*]数据库编码集—数据库未来存储数据
[*]数据库校验集—支持数据库举行字段比力使用的编码,本质也是一种读取数据库中数据所采用的编码格式
数据库无论对数据做任何操作,都必须包管操作和编码必须是编码一致的。
创建数据库案例

当我们创建数据库没有指定字符集和校验规则时,体系使用默认字符集:utf8,校验规则是:utf8_ general_ ci


[*] 创建一个使用utf8字符集的 db1 数据库
create database if not exists db1 charset=utf8;

https://i-blog.csdnimg.cn/direct/a1d55d46a8884487bcb2a80c270e9d38.png#pic_center


[*] 创建一个使用utf8字符集,并带校验规则的 db2 数据库
create database if not exists db2 charset=utf8 collate utf8_general_ci;

https://i-blog.csdnimg.cn/direct/b2629d06f8e74108b84cd3336658ebb2.png#pic_center
字符集和校验规则

查看体系默认字符集以及校验规则

show variables like 'character_set_database';
show variables like 'collation_database';
https://i-blog.csdnimg.cn/direct/4229fc9363514b40928dfaa0f6d62db9.png#pic_center
查看数据库支持的字符集

show charset;
字符集主要是控制用什么语言,比如utf8就可以使用中文
https://i-blog.csdnimg.cn/direct/46ab0f5f2b2c4b2b889a6f7825479bc0.png#pic_center
查看数据库支持的字符集校验规则

show collation;
校验规则对数据库的影响

例如对于巨细写的区分
创建一个校验规则使用utf8_general_ci的数据库[不区分巨细写]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
https://i-blog.csdnimg.cn/direct/db67045a1f5647e9bea21138eee5c059.png#pic_center
创建一个数据库,校验规则使用utf8_ bin[区分巨细写]
create database test2 collate utf8_bin;
use test;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
https://i-blog.csdnimg.cn/direct/1cc4fdfe62e54cf4a5ff40c9df2450ff.png#pic_center
举行查询和排序的效果:
不区分巨细写的查询以及排序的效果
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
| A    |
+------+
2 rows in set (0.00 sec)

mysql> select * from person order by name;
+------+
| name |
+------+
| a    |
| A    |
| b    |
| B    |
+------+
4 rows in set (0.00 sec)
区分巨细写的查询以及排序的效果
mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
+------+
1 row in set (0.00 sec)

mysql> select * from person order by name;
+------+
| name |
+------+
| A    |
| B    |
| a    |
| b    |
+------+
4 rows in set (0.00 sec)
操纵数据库

查看数据库

show databases;
显示创建语句

show create database 数据库名;
https://i-blog.csdnimg.cn/direct/b6700660d4ff4258a49351d427e5599d.png#pic_center
分析:


[*]MySQL建议我们关键字使用大写,但是不是必须的。
[*]数据库名字的反引号` `是为了防止使用的数据库名刚好是关键字。
[*]/*!40100 default.... */这个不是注释,体现当前mysql版本大于4.01版本,就实行这句话。
修改数据库

ALTER DATABASE db_name ...];

alter_spacification:
CHARACTER SET charset_name
COLLATE collation_name
对数据库的修改主要指的是修改数据库的字符集、校验规则
示例:将test2数据库字符集改成gbk
https://i-blog.csdnimg.cn/direct/700ba940e3e64e51ae405751041c23cb.png#pic_center
数据库删除

drop database db_name;
实行删除之后的效果:


[*]数据库内部看不到对应的数据库
[*]对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
备份和规复

备份

mysqldump -P3306 -u root -p -B 数据库名 > 数据库备份存储的文件路径
示例:将test1库备份到文件
mysqldump -uroot -p -B test1 >./mytest.sql
https://i-blog.csdnimg.cn/direct/b0c28bd095fa404e90cc2aa75b8965ba.png#pic_center
这时,打开mytest.sql文件里的内容,其实把我们整个创建数据库、建表、导入数据的语句到装载到这个文件中
https://i-blog.csdnimg.cn/direct/d5a124a918234dfaab341641d12b9fb3.png#pic_center
还原

mysql> source /home/liuxu/test/mytest.sql;
注意事项

如果备份的不是整个数据库,而是其中的一张表呢?
mysqldump -uroot -p 数据库名 表名1 表名2 >./mytest.sql
同时备份多个数据库
mysqldump -uroot -p-B 数据库名1 数据库名2 >./mytest.sql
   如果备份一个数据库时,没有带上-B参数,在规复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
以此来做到对数据库重命名
查看连接情况

show processlist;
https://i-blog.csdnimg.cn/direct/2f32d7cbf688414495bc61135c791a8d.png#pic_center
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是自己正常登岸的,很有可能你的数据库是被人入侵了。
创建表

语法:
create table table_name(
        field1 datatype,
        field2 datatype,
    field3 datatype
        )charset=字符集 collate=校验规则 engine 存储引擎;
分析:


[*]field 体现列明
[*]datatype 体现列的范例
[*]character set 字符集,如果没有指定字符集,则以地点数据库的字符集为准
[*]collate 校验规则,如果没有指定校验规则,则以地点数据库的校验规则为准
创建表案例

mysql> create table user(
    -> id int,
    -> name varchar(20) comment '用户名',
    -> password char(32) comment '密码是32位的md5值',
    -> birthday date comment '生日'
    -> )charset=utf8 engine MyISAM;
Query OK, 0 rows affected (0.02 sec)
分析:


[*] comment 对该列举行笔墨分析
[*] 差别的存储引擎,创建表的文件不一样
user表存储引擎是MyISAM,在数据库中有三个差别的文件,分别是:

[*]user.frm:表结构
[*]user.MYD:表数据
[*]user.MYI:表索引
https://i-blog.csdnimg.cn/direct/6d5c996f0dc848bf9f883e9a9fd1feda.png#pic_center

查看表结构

desc 表名;
https://i-blog.csdnimg.cn/direct/e15498510823428cb2d23382b0135eea.png#pic_center
修改表

在项目实际开发中,要经常修改某个表的结构,比如字段名字、字段巨细、字段范例、表的字符集范例、表的存储引擎等等,大概是添加字段、删除字段等。这时我们就需要修改表。
案例:


[*] 在user表中添加两条纪录
mysql> insert into user values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-03');

[*] 在user表中添加一个字段,用于保存图片路径
mysql> alter table user add assets varchar(100) comment '图片路径' after birthday;
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES|   | NULL    |       |
| name   | varchar(20)| YES|   | NULL    |       |
| password | char(32)   | YES|   | NULL    |       |
| birthday | date         | YES|   | NULL    |       |
| assets   | varchar(100) | YES|   | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
插入新字段后,对原来表中的数据是没有影响的:
mysql> select * from user;
+------+------+----------+------------+--------+
| id   | name | password | birthday   | assets |
+------+------+----------+------------+--------+
|    1 | a    | b      | 1982-01-04 | NULL   |
|    2 | b    | c      | 1984-01-03 | NULL   |
+------+------+----------+------------+--------+
2 rows in set (0.00 sec)

[*] 修改name,将其长度改成60
mysql> alter table user modify name varchar(60);
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES|   | NULL    |       |
| name   | varchar(60)| YES|   | NULL    |       |
| password | char(32)   | YES|   | NULL    |       |
| birthday | date         | YES|   | NULL    |       |
| assets   | varchar(100) | YES|   | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

[*] 删除password列
删除字段一定要警惕,删除字段及其对应的列数据都没了
mysql> alter table user drop password;
mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES|   | NULL    |       |
| name   | varchar(60)| YES|   | NULL    |       |
| birthday | date         | YES|   | NULL    |       |
| assets   | varchar(100) | YES|   | NULL    |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

[*] 修改表名位employee
to可以省掉
mysql> alter table user rename to employee;
mysql> select * from employee;
+------+------+------------+--------+
| id   | name | birthday   | assets |
+------+------+------------+--------+
|    1 | a    | 1982-01-04 | NULL   |
|    2 | b    | 1984-01-03 | NULL   |
+------+------+------------+--------+
2 rows in set (0.00 sec)

[*] 将name列修改为xingming
mysql> alter table employee change name xingming varchar(60);--新字段需要完整定义
mysql> desc employee;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES|   | NULL    |       |
| xingming | varchar(60)| YES|   | NULL    |       |
| birthday | date         | YES|   | NULL    |       |
| assets   | varchar(100) | YES|   | NULL    |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

删除表

语法:
drop table table_name;
示例:
mysql> drop table if exists employee;
mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| employee      || person          |+-----------------+2 rows in set (0.00 sec)mysql> drop table if exists employee;
Query OK, 0 rows affected (0.01 sec)mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| person          |+-----------------+1 row in set (0.00 sec)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库和表的简单操作