创建数据库
- CREATE DATABASE [IF NOT EXISTS] db_name [create_specification ...];
- create_specification:
- [DEFAULT] CHARACTER SET charset_name
- [DEFAULT] COLLATE collation_name
复制代码 分析:
- 大写的是关键字
- []是可选项
- character set:指定数据库采用的字符集
- collate:指定数据库字符集的校验规则
创建数据库本质就是在/var/lib/mysql创建一个目录
创建数据库的时候,有两个编码集:
- 数据库编码集—数据库未来存储数据
- 数据库校验集—支持数据库举行字段比力使用的编码,本质也是一种读取数据库中数据所采用的编码格式
数据库无论对数据做任何操作,都必须包管操作和编码必须是编码一致的。
创建数据库案例
当我们创建数据库没有指定字符集和校验规则时,体系使用默认字符集:utf8,校验规则是:utf8_ general_ ci
- 创建一个使用utf8字符集的 db1 数据库
- create database if not exists db1 charset=utf8;
复制代码
- 创建一个使用utf8字符集,并带校验规则的 db2 数据库
- create database if not exists db2 charset=utf8 collate utf8_general_ci;
复制代码
字符集和校验规则
查看体系默认字符集以及校验规则
- show variables like 'character_set_database';
- show variables like 'collation_database';
复制代码
查看数据库支持的字符集
字符集主要是控制用什么语言,比如utf8就可以使用中文
查看数据库支持的字符集校验规则
校验规则对数据库的影响
例如对于巨细写的区分
创建一个校验规则使用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');
复制代码
创建一个数据库,校验规则使用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');
复制代码
举行查询和排序的效果:
不区分巨细写的查询以及排序的效果
- 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 create database 数据库名;
复制代码
分析:
- MySQL建议我们关键字使用大写,但是不是必须的。
- 数据库名字的反引号` `是为了防止使用的数据库名刚好是关键字。
- /*!40100 default.... */这个不是注释,体现当前mysql版本大于4.01版本,就实行这句话。
修改数据库
- ALTER DATABASE db_name [alter_spacification [,alter_spacification]...];
- alter_spacification:
- [DEFAULT] CHARACTER SET charset_name
- [DEFAULT] COLLATE collation_name
复制代码 对数据库的修改主要指的是修改数据库的字符集、校验规则
示例:将test2数据库字符集改成gbk
数据库删除
- drop database [if exists] db_name;
复制代码 实行删除之后的效果:
- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
备份和规复
备份
- mysqldump -P3306 -u root -p -B 数据库名 > 数据库备份存储的文件路径
复制代码 示例:将test1库备份到文件
- mysqldump -uroot -p -B test1 >./mytest.sql
复制代码
这时,打开mytest.sql文件里的内容,其实把我们整个创建数据库、建表、导入数据的语句到装载到这个文件中
还原
- mysql> source /home/liuxu/test/mytest.sql;
复制代码 注意事项
如果备份的不是整个数据库,而是其中的一张表呢?
- mysqldump -uroot -p 数据库名 表名1 表名2 >./mytest.sql
复制代码 同时备份多个数据库
- mysqldump -uroot -p -B 数据库名1 数据库名2 >./mytest.sql
复制代码 如果备份一个数据库时,没有带上-B参数,在规复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
以此来做到对数据库重命名
查看连接情况
可以告诉我们当前有哪些用户连接到我们的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:表索引
查看表结构
修改表
在项目实际开发中,要经常修改某个表的结构,比如字段名字、字段巨细、字段范例、表的字符集范例、表的存储引擎等等,大概是添加字段、删除字段等。这时我们就需要修改表。
案例:
- 在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 [if exists] 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企服之家,中国第一个企服评测及商务社交产业平台。 |