• 查看当前登陆用户:
  1. select user();
  • 登录数据库
  1. mysql -u用户名 -p密码 -h 连接地址
  • 修改当前用用户密码
  1. set password = password('123456');

库操作

  • 创建库

相当于创建了一个文件夹

  1. create database python;
  • 查看库
  1. show databases;

使用库

切换到对应的文件夹

  1. use python

表操作

  • 创建表
  1. create table tablename(字段名 类型(长度),字段名 类型(长度) 约束...)
  2. # 例子
  3. create table score(id int(8),name char(20),num int(4));
  • 修改表

使用

  1. 语法:
  2. 1. 修改表名
  3. ALTER TABLE 表名
  4. RENAME 新表名;
  5. 2. 增加字段
  6. ALTER TABLE 表名
  7. ADD 字段名 数据类型 [完整性约束条件…],
  8. ADD 字段名 数据类型 [完整性约束条件…];
  9. 3. 删除字段
  10. ALTER TABLE 表名
  11. DROP 字段名;
  12. 4. 修改字段
  13. ALTER TABLE 表名
  14. MODIFY 字段名 数据类型 [完整性约束条件…];
  15. ALTER TABLE 表名
  16. CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
  17. ALTER TABLE 表名
  18. CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
  19. 5.修改字段排列顺序/在增加的时候指定字段位置
  20. ALTER TABLE 表名
  21. ADD 字段名 数据类型 [完整性约束条件…] FIRST;
  22. ALTER TABLE 表名
  23. ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
  24. ALTER TABLE 表名
  25. CHANGE 字段名 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST;
  26. ALTER TABLE 表名
  27. MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名;

alter操作非空和唯一

  1. create table t(id int unique,name char(10) not null);
  2. #去掉null约束
  3. alter table t modify name char(10) null;
  4. # 添加null约束
  5. alter table t modify name char(10) not null;
  6. # 去掉unique约束
  7. alter table t drop index id;
  8. # 添加unique约束
  9. alter table t modify id int unique;
  10. alter处理nullunique约束

alter操作主键

  1. 1、首先创建一个数据表table_test
  2. create table table_test(
  3. `id` varchar(100) NOT NULL,
  4. `name` varchar(100) NOT NULL,
  5. PRIMARY KEY (`name`)
  6. );
  7. 2、如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。
  8. 先删除主键
  9. alter table table_test drop primary key;
  10. 然后再增加主键
  11. alter table table_test add primary key(id);
  12. 注:在增加主键之前,必须先把反复的id删除掉。

为表添加外键

  1. 创建press
  2. CREATE TABLE `press` (
  3. `id` int(11) NOT NULL,
  4. `name` char(10) DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. )
  7. 创建book
  8. CREATE TABLE `book` (
  9. `id` int(11) DEFAULT NULL,
  10. `bk_name` char(12) DEFAULT NULL,
  11. `press_id` int(11) NOT NULL,
  12. KEY `press_id` (`press_id`)
  13. )
  14. book表添加外键
  15. alter table book add constraint fk_id foreign key(press_id) references press(id);
  16. 删除外键
  17. alter table book drop foreign key fk_id;

alter示例

  1. mysql> desc staff_info;
  2. +-------+-----------------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-----------------------+------+-----+---------+-------+
  5. | id | int(11) | YES | | NULL | |
  6. | name | varchar(50) | YES | | NULL | |
  7. | age | int(3) | YES | | NULL | |
  8. | sex | enum('male','female') | YES | | NULL | |
  9. | phone | bigint(11) | YES | | NULL | |
  10. | job | varchar(11) | YES | | NULL | |
  11. +-------+-----------------------+------+-----+---------+-------+
  12. 6 rows in set (0.00 sec)
  13. # 表重命名
  14. mysql> alter table staff_info rename staff;
  15. Query OK, 0 rows affected (0.00 sec)
  16. mysql> desc staff;
  17. +-------+-----------------------+------+-----+---------+-------+
  18. | Field | Type | Null | Key | Default | Extra |
  19. +-------+-----------------------+------+-----+---------+-------+
  20. | id | int(11) | YES | | NULL | |
  21. | name | varchar(50) | YES | | NULL | |
  22. | age | int(3) | YES | | NULL | |
  23. | sex | enum('male','female') | YES | | NULL | |
  24. | phone | bigint(11) | YES | | NULL | |
  25. | job | varchar(11) | YES | | NULL | |
  26. +-------+-----------------------+------+-----+---------+-------+
  27. 6 rows in set (0.00 sec)
  28. # 删除sex列
  29. mysql> alter table staff drop sex;
  30. Query OK, 0 rows affected (0.02 sec)
  31. Records: 0 Duplicates: 0 Warnings: 0
  32. mysql> desc staff;
  33. +-------+-------------+------+-----+---------+-------+
  34. | Field | Type | Null | Key | Default | Extra |
  35. +-------+-------------+------+-----+---------+-------+
  36. | id | int(11) | YES | | NULL | |
  37. | name | varchar(50) | YES | | NULL | |
  38. | age | int(3) | YES | | NULL | |
  39. | phone | bigint(11) | YES | | NULL | |
  40. | job | varchar(11) | YES | | NULL | |
  41. +-------+-------------+------+-----+---------+-------+
  42. 5 rows in set (0.01 sec)
  43. # 添加列
  44. mysql> alter table staff add sex enum('male','female');
  45. Query OK, 0 rows affected (0.03 sec)
  46. Records: 0 Duplicates: 0 Warnings: 0
  47. # 修改id的宽度
  48. mysql> alter table staff modify id int(4);
  49. Query OK, 0 rows affected (0.02 sec)
  50. Records: 0 Duplicates: 0 Warnings: 0
  51. mysql> desc staff;
  52. +-------+-----------------------+------+-----+---------+-------+
  53. | Field | Type | Null | Key | Default | Extra |
  54. +-------+-----------------------+------+-----+---------+-------+
  55. | id | int(4) | YES | | NULL | |
  56. | name | varchar(50) | YES | | NULL | |
  57. | age | int(3) | YES | | NULL | |
  58. | phone | bigint(11) | YES | | NULL | |
  59. | job | varchar(11) | YES | | NULL | |
  60. | sex | enum('male','female') | YES | | NULL | |
  61. +-------+-----------------------+------+-----+---------+-------+
  62. 6 rows in set (0.01 sec)
  63. # 修改name列的字段名
  64. mysql> alter table staff change name sname varchar(20);
  65. Query OK, 4 rows affected (0.03 sec)
  66. Records: 4 Duplicates: 0 Warnings: 0
  67. mysql> desc staff;
  68. +-------+-----------------------+------+-----+---------+-------+
  69. | Field | Type | Null | Key | Default | Extra |
  70. +-------+-----------------------+------+-----+---------+-------+
  71. | id | int(4) | YES | | NULL | |
  72. | sname | varchar(20) | YES | | NULL | |
  73. | age | int(3) | YES | | NULL | |
  74. | phone | bigint(11) | YES | | NULL | |
  75. | job | varchar(11) | YES | | NULL | |
  76. | sex | enum('male','female') | YES | | NULL | |
  77. +-------+-----------------------+------+-----+---------+-------+
  78. 6 rows in set (0.00 sec)
  79. # 修改sex列的位置
  80. mysql> alter table staff modify sex enum('male','female') after sname;
  81. Query OK, 0 rows affected (0.02 sec)
  82. Records: 0 Duplicates: 0 Warnings: 0
  83. mysql> desc staff;
  84. +-------+-----------------------+------+-----+---------+-------+
  85. | Field | Type | Null | Key | Default | Extra |
  86. +-------+-----------------------+------+-----+---------+-------+
  87. | id | int(4) | YES | | NULL | |
  88. | sname | varchar(20) | YES | | NULL | |
  89. | sex | enum('male','female') | YES | | NULL | |
  90. | age | int(3) | YES | | NULL | |
  91. | phone | bigint(11) | YES | | NULL | |
  92. | job | varchar(11) | YES | | NULL | |
  93. +-------+-----------------------+------+-----+---------+-------+
  94. 6 rows in set (0.00 sec)
  95. # 创建自增id主键
  96. mysql> alter table staff modify id int(4) primary key auto_increment;
  97. Query OK, 4 rows affected (0.02 sec)
  98. Records: 4 Duplicates: 0 Warnings: 0
  99. mysql> desc staff;
  100. +-------+-----------------------+------+-----+---------+----------------+
  101. | Field | Type | Null | Key | Default | Extra |
  102. +-------+-----------------------+------+-----+---------+----------------+
  103. | id | int(4) | NO | PRI | NULL | auto_increment |
  104. | sname | varchar(20) | YES | | NULL | |
  105. | sex | enum('male','female') | YES | | NULL | |
  106. | age | int(3) | YES | | NULL | |
  107. | phone | bigint(11) | YES | | NULL | |
  108. | job | varchar(11) | YES | | NULL | |
  109. +-------+-----------------------+------+-----+---------+----------------+
  110. 6 rows in set (0.00 sec)
  111. # 删除主键,可以看到删除一个自增主键会报错
  112. mysql> alter table staff drop primary key;
  113. ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
  114. # 需要先去掉主键的自增约束,然后再删除主键约束
  115. mysql> alter table staff modify id int(11);
  116. Query OK, 4 rows affected (0.02 sec)
  117. Records: 4 Duplicates: 0 Warnings: 0
  118. mysql> desc staff;
  119. +-------+-----------------------+------+-----+---------+-------+
  120. | Field | Type | Null | Key | Default | Extra |
  121. +-------+-----------------------+------+-----+---------+-------+
  122. | id | int(11) | NO | PRI | 0 | |
  123. | sname | varchar(20) | YES | | NULL | |
  124. | sex | enum('male','female') | YES | | NULL | |
  125. | age | int(3) | YES | | NULL | |
  126. | phone | bigint(11) | YES | | NULL | |
  127. | job | varchar(11) | YES | | NULL | |
  128. +-------+-----------------------+------+-----+---------+-------+
  129. 6 rows in set (0.01 sec)
  130. mysql> alter table staff drop primary key;
  131. Query OK, 4 rows affected (0.06 sec)
  132. Records: 4 Duplicates: 0 Warnings: 0
  133. # 添加联合主键
  134. mysql> alter table staff add primary key (sname,age);
  135. Query OK, 0 rows affected (0.02 sec)
  136. Records: 0 Duplicates: 0 Warnings: 0
  137. # 删除主键
  138. mysql> alter table staff drop primary key;
  139. Query OK, 4 rows affected (0.02 sec)
  140. Records: 4 Duplicates: 0 Warnings: 0
  141. # 创建主键id
  142. mysql> alter table staff add primary key (id);
  143. Query OK, 0 rows affected (0.02 sec)
  144. Records: 0 Duplicates: 0 Warnings: 0
  145. mysql> desc staff;
  146. +-------+-----------------------+------+-----+---------+-------+
  147. | Field | Type | Null | Key | Default | Extra |
  148. +-------+-----------------------+------+-----+---------+-------+
  149. | id | int(11) | NO | PRI | 0 | |
  150. | sname | varchar(20) | NO | | | |
  151. | sex | enum('male','female') | YES | | NULL | |
  152. | age | int(3) | NO | | 0 | |
  153. | phone | bigint(11) | YES | | NULL | |
  154. | job | varchar(11) | YES | | NULL | |
  155. +-------+-----------------------+------+-----+---------+-------+
  156. 6 rows in set (0.00 sec)
  157. # 为主键添加自增属性
  158. mysql> alter table staff modify id int(4) auto_increment;
  159. Query OK, 4 rows affected (0.02 sec)
  160. Records: 4 Duplicates: 0 Warnings: 0
  161. mysql> desc staff;
  162. +-------+-----------------------+------+-----+---------+----------------+
  163. | Field | Type | Null | Key | Default | Extra |
  164. +-------+-----------------------+------+-----+---------+----------------+
  165. | id | int(4) | NO | PRI | NULL | auto_increment |
  166. | sname | varchar(20) | NO | | | |
  167. | sex | enum('male','female') | YES | | NULL | |
  168. | age | int(3) | NO | | 0 | |
  169. | phone | bigint(11) | YES | | NULL | |
  170. | job | varchar(11) | YES | | NULL | |
  171. +-------+-----------------------+------+-----+---------+----------------+
  172. 6 rows in set (0.00 sec)
  • 查看表
  1. show tables;
  • 查看表结构
  1. # 查看一些简单的信息,更直观
  2. desc score;
  3. # 详细,可以查看到表名编码,存储引擎等..
  4. show create table score;
  • 删除表
  1. drop table score;

查看数据库的字符集设置

  1. show variables like '%character%';

临时设置字符集(数据库重启既失效)

永久设置需要修改mysql配置文件

  1. # 命令临时修改
  2. set character_set_server='utf8';

数据的增删改查

  1. # 插入一条数据
  2. insert into 表名(字段名) values(值)
  3. insert into score(id,name,num) values(1,'alex',0);
  4. # 插入多条数据
  5. insert into score(id,name,num) values(1,'alex',0),(2,'mhy',0);

  1. delete from 表名 where 条件
  2. # 删除这张表里ID等于2的数据
  3. delete from score where id = 2;

  1. update set 字段名='新的值' where 条件
  2. update score set id = 4 where name = 'mhy';

  1. # 查询表里所有的数据
  2. select * from score;

约束 和 类型

类型

数字类型:

整型(): 长度的约束是无效的,它能够表示的大小只和它存储的字节数相关
类型 大小 范围 用途
tinyint 1bytes 2**8 小整数值(年龄)
smallint 2bytes 2**16 大整数值
miedium 3bytes 2**24 大整数值
int 4bytes 2**32 大整数值(整数)
bigint 8bytes 2**64 极大整数值

示例:
  1. # age3 tinyint unsigned 无符号(-)
  2. create table t1(age1 tinyint(2),age2 tinyint,age3 tinyint unsigned);

浮点型():薪资
  • float(m,n) 单精度:

    • m 表示一共多少位
    • n 表示小数部分占其中的多少

示例
  1. create table t2(money float(6,2));
  2. insert into t2 values(2222222.33323232);
  • double 双精度:能够表示的小数点之后的位数更精准(和float使用方法一样)

示例:
  1. create table t4(money double);
  2. insert into t4 values(333.339324234323232);

字符串类型:

char(255):
  • 浪费空间
  • 操作节省时间

例如:用户名\密码\手机号\身份证号

char是定长存储 在存储过程中会将剩余的字节数用空格来替补

char(20) 存储后就是 ‘mhy ‘会将剩余没有使用的使用空格来填补

varchar(65535)
  • 存储节省空间
  • 更加浪费时间(慢)

例如:评论\微博\微信朋友圈\论坛

varchar变长存储

‘mhy’ 存储过后就是 ‘mhy3’

示例
  1. create table t5(username char(20),password char(32));

时间类型:

datetime

年月日时分秒

例如:登陆时间\修改时间\出生日期

date

年月日

例如:注册时间

time

时分秒

例如:跑步计时

timestamp

时间戳

时间戳4字节:1970-2038-xx-xx

year

示例:
  1. # 创建
  2. create table t6(dt datetime,d date,t time,ts timestamp,y year);
  3. # 查看当前时间
  4. select now();
  5. # 插入当前时间
  6. insert into t6(dt) values(now());
  7. insert into t6(y) values(now());
  8. insert into t6(t) values(now());
  9. # 插入自定义时间
  10. insert into t6(d) values(20190915);
  11. insert into t6(t) values(230909);
  12. # 字符串形式
  13. insert into t6(t) values('23:09:09');
  14. insert into t6(d) values('2019/09/15');
  15. # 更新后timestamp会随着最后的时间进行修改
  16. update t6 set dt='2019-09-14 23:12:12' where d = '2019/09/15';
  17. # 更新
  18. create table t6(dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, d date, t time, ts timestamp, y year);

单选和多选 性别 爱好

  • enum 单选

  • set 多选 并去重

示例:
  1. create table t8(gender enum('男','女'),hobby set('抽烟','喝酒','烫头','洗脚'));
  2. insert into t8 values('男','抽烟');
  3. insert into t8 values('男','抽烟,烫头,洗脚');

Innodb引擎

mysql 5.6以上版本默认的存储引擎就是innodb引擎。

frm:格式的文件,存储表结构

ibd:存储数据

查看当前数据库的存储引擎

  1. show variables like "default_storage_engine";

查看数据库的支持的存储引擎:

  1. show engines;

Innodb引擎:支持事务,行级锁定,外键

事务:

  1. 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

  2. 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

  3. 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

  4. 持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

行级锁定:

当一个用户请求发生了事务,提交成功后,会对某一个用户加锁(行级锁),进行修改,同一时间,其他的人申请修改这个行的数据不能修改,但是其他行的数据不影响。这就是行级锁,但是如果同一时间修改的行过多,行级锁其实效率不高,innodb也支持表锁

外键:

表的外键是另一张表的主键。将两张表联系到一起。

作用:简单的说是为了保证数据的完整性。

严格模式设置:

  1. #临时修改
  2. set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
  3. # 配置文件修改
  4. sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"