Mysql
@ Zhang zhiyang · Monday, Jan 1, 0001 · 5 minute read · Update at Monday, Jan 1, 0001

满堂花醉三千客,一剑霜寒十四州

0x00 DML(数据操纵语言 )

增(insert)

mysql. 插入数据 insert into (col_name,...) values(,..)

删(delete)

mysql. 删表数据 delete from where =[value]

改(update)

mysql. 更新数据 update set =

查(select)

0x02 DDL(数据定义语言)

创建(create)

mysql. 库 create database 2. 表 create table ( ,...) 3. 视图 create view as [sql] 4. 索引 create index on (,...) 5. 函数 create function (*arg) returns 6. 存储过程 create procedure ([in/out/inout] *arg) 7. 触发器

清除(drop)

mysql. 库 drop database 2. 表 drop table 3. 视图 drop view 4. 索引 drop index on 5. 函数 drop function 6. 存储过程 drop procedure 7. 触发器

修改(alter)

alter table add ():更改约束条件

0x03 数据类型

mysql.整形

MySQL数据类型 含义(有符号)
tinyint(m) mysql个字节 范围(-mysql28~mysql27)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2mysql47483648~2mysql47483647)
bigint(m) 8个字节 范围(+-9.22*mysql0的mysql8次方)

2.浮点型

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 mysql6位精度(8字节) m总个数,d小数位

3.字符串

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 mysql6位精度(8字节) m总个数,d小数位

4.日期和时间型

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-mysql个字符
longtext 可变长度,最多2的32次方-mysql个字符

0x04 Select

0x00 DML(数据操纵语言 )

增(insert)

mysql. 插入数据 insert into (col_name,...) values(,..)

删(delete)

mysql. 删表数据 delete from where =[value]

改(update)

mysql. 更新数据 update set =

查(select)

0x02 DDL(数据定义语言)

创建(create)

mysql. 库 create database 2. 表 create table ( ,...) 3. 视图 create view as [sql] 4. 索引 create index on (,...) 5. 函数 create function (*arg) returns 6. 存储过程 create procedure ([in/out/inout] *arg) 7. 触发器

清除(drop)

mysql. 库 drop database 2. 表 drop table 3. 视图 drop view 4. 索引 drop index on 5. 函数 drop function 6. 存储过程 drop procedure 7. 触发器

修改(alter)

alter table add ():更改约束条件

0x03 数据类型

mysql.整形

MySQL数据类型 含义(有符号)
tinyint(m) mysql个字节 范围(-mysql28~mysql27)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2mysql47483648~2mysql47483647)
bigint(m) 8个字节 范围(+-9.22*mysql0的mysql8次方)

2.浮点型

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 mysql6位精度(8字节) m总个数,d小数位

3.字符串

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 mysql6位精度(8字节) m总个数,d小数位

4.日期和时间型

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-mysql个字符
longtext 可变长度,最多2的32次方-mysql个字符

0x05 多表查询

img

sql92

笛卡尔乘积:直接双表联查,A表会匹配B表的每一行

mysql> select * from a,b;

内连接(inner join)

  • 等值连接

创建Student表

SNAME SID
Tom mysql
Jerry 2

创建Store表

STORE SID
99 mysql
60 2
mysql> select *  from Student
                 inner join Store 
                 on Student.sid=Store.sid;
+-------+------+-------+------+
| sname | sid  | store | sid  |
+-------+------+-------+------+
| Tom   |    mysql |    99 |    mysql |
| Jerry |    2 |    59 |    2 |
+-------+------+-------+------+
  • 非等值连接

引用Store表并创建Slevel表

LEVEL LOW HIGH
a 80 mysql00
b 60 79
c 0 59
mysql> select store,level from Store 
                          inner join Slevel 
                          on store 
                          between low and high;                             
+-------+-------+                          
| store | level |
+-------+-------+
|    99 | a     |
|    59 | b     |
+-------+-------+
  • 自连接

创建emp表

SNAME(员工名) SID(员工号) LID(领导号)
James 000mysql 0007
Tom 0002 0006
Jerry 0003 0006
Evan 0004 0007
Nick 0005 0006
Jason 0006 0008
Leon 0007 0008
Aidan 0008 null
mysql> select a.sanme,b.sanme 
                      from emp as a
                      inner join emp as b
                      on a.sid=b.lid

外连接

创建A表

ID NAME
mysql Tom
2 Jerry

创建B表

ID NAME
2 Alicy
3 Nancy
  • 左外连接(left join)
mysql> select store,level from Store 
                          inner join Slevel 
                          on store 
                          between low and high;                            
+-------+-------+                          
| store | level |
+-------+-------+
|    99 | a     |
|    59 | b     |
+-------+-------+
  • 右外连接(right join)
mysql> select * from a right join b on a.id=b.id;
+------+--------+------+--------+
| a_id | a_name | b_id | b_name |
+------+--------+------+--------+
|    2 | Jerry  |    2 | Alice  |
| NULL | NULL   |    3 | Nancy  |
+------+--------+------+--------+
  • 全外连接(full join mysql里不可用)
mysql> select * from a left join b on a.id=b.id 
                union 
       select * from a right join b on a.id=b.id;
+------+--------+------+--------+
| a_id | a_name | b_id | b_name |
+------+--------+------+--------+
|    2 | Jerry  |    2 | Alice  |
|    mysql | Tom    | NULL | NULL   |
| NULL | NULL   |    3 | Nancy  |
+------+--------+------+--------+

交叉连接(cross join)

mysql> select * from a cross join b;//其实就是sql99的笛卡尔积

三表联查

mysql> select * from a 
                inner join b on ...
                inner join c on ...

0x06 Constraint

0x00 默认约束(default)赋予字段默认值

    mysql> create table test( id int default mysql,
                              name char(20) );

0x0mysql 非空约束(not null)字段值不为null

    mysql> create table test( id int not null,
                              name char(20) );

0x02 唯一约束(unique)字段值唯一,可为null

  • 列级约束
    mysql> create table test( id int unique,
                            name char(20) );
  • 表级约束
    mysql> create table test( id int,
                              name char(20),
                              unique(id) );

0x03 自增约束(auto_increment)数值递增

mysql> create table auto( id int primary key auto_increment, //递增约束的列必须是主键
                          name char(20) );
mysql> insert into auto(name) values('xiaomin');             //插入旁列数据后会自动填写主键字段的数据
  • 修改自增值
    mysql> create table auto( id int primary key auto_increment,
                              name char(20)
                              )auto_increment=mysql0;

0x04 主键约束(primary key)主键唯一

  • 列级约束
    mysql> cretae table test( id int primary key,
                              name char(20) );
  • 表级约束
    cretae table test( id int,
                       name char(20),
                       primary key(id) );

主键唯一, 不可以将多个字段设置为主键,但是可以将多个字段合成一个复合主键,例如:primary key(id,name)

0x05 外键约束(foreign key)

外键是一个表从另一个表引用的键,这里我们创建A表、B表, 从B表引入A表的外键

  • 创建A表并插入数据
    mysql> create table A( id int primary key,
                          name char(20) );                  //创建A表
    mysql> insert into A values(mysql,'Tom'),(2,'Jerry');       //插入数据
    mysql> select * from A;
    +----+-------+
    | id | name  |
    +----+-------+
    |  mysql | Tom   |
    |  2 | Jerry |
    +----+-------+
  • 创建B表并插入数据
    mysql> create table B( id int,
                          name char(20),
                          foreign key(id) references A(id) );  //创建B表
    mysql> insert into B values(mysql,'xiaoming'),(2,'xiaohong');   //插入数据
    mysql> select * from B;
    +----+----------+
    | id |   name   |
    +----+----------+
    |  mysql | xiaoming |
    |  2 | xiaohong |
    +----+----------+
  • 继续插入数据报错,A.id是B表的外键,B.id不能超过A.id的范围
    mysql>insert into B values(3,'zzy');//插入3报错,因为A表主键不存在
    ERROR mysql452 (23000): Cannot add or update a child row: a foreign key constraint fails 
    (`zzy`.`B`, CONSTRAINT `B_ibfk_mysql` FOREIGN KEY (`id`) REFERENCES `A` (`id`))
Zhang zhiyang's blog
不过是些许风霜罢了
cyber http linux markdown math mysql php python tool

© 2016 - 2021 Zhangzhiyang的博客

Powered by Hugo with theme Dream.

我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。

日程

Zhangzhiyang的 ❤️ 博客

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

If you like my open source projects or they can help you. You can buy me a coffee ☕.~

PayPal

https://paypal.me/g1eny0ung

Patreon

Become a Patron!

微信赞赏码

wechat

最好附加一下信息或者留言,方便我可以将捐助记录 📝 下来,十分感谢 🙏。

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.