Blogger Information
Blog 11
fans 0
comment 0
visits 13402
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MYSQL笔记
Blueprint
Original
878 people have browsed it

数据库基本概念

命令行链接
  1. mysql -hlocalhost -P3306 -u'username' -p'password'
host -h 主机
port -P 端口号
user -u 用户名
Password -p 密码
  1. -h链接本地可以省略,-P默认端口可以省略

退出

  • exit
  • quit
  • \q
数据库、表相关
  1. 数据库:数据库中存放的是表,一个数据库可以存放多个表

  2. 表:表是用来存放数据的

  3. 关系: 两个表的公共字段

  4. 行:也称记录,也称实体

  5. 列:也称字段,也称属性

    就表结构而言,表分为行和列。就数据而言,表分为记录和字段。面向对象而言,一个记录就是一个实体,一个字段就是一个属性。

数据相关
数据冗余:相同的数据
  1. 冗余只能减少,不能杜绝
  2. 冗余减少的方法就是分表,同时降低查询速度
数据完整性

正确性+完整性

  1. 正确性:数据类型正确
  2. 准确性:数据范围要准确
数据库执行执行过程

操作数据库

显示数据库
  1. show databases;

创建数据库
  1. create database [if not exists] 数据名 [选项]

  1. #特殊字符创建数据库需要用反引号包括
  2. #创建数据库时指定使用的字符编码
  3. #如果不指定字符编码,数据库默认使用安装数据库时的指定编码
  4. create database `emp` charset=gbk;
删除数据库

语法:

  1. drop database [if exists] `database-name`;
显示创建数据库的语句

语法:

  1. show create database database-name;
修改数据库

语法:

  1. #修改数据库的字符编码
  2. alter database database-name charest=utf8;
选择数据库

语法:

  1. use database-name;

表操作

创建表

语法:

  1. create table [if not exists] `表名`
  2. `字段名` 数据类型 [null|no null][default][auto_incremment][primary key][comment],
  3. `字段名` 数据类型 [null|no null][default][auto_incremment][primary key][comment]
  4. )[engine=][charset=utf8]
  5. null|no null 是否为空
  6. default 默认值
  7. auto_incremment 自动增长
  8. primary key 主键 值不能为空,每个表只有一个主键
  9. comment 备注
  10. engine 引擎决定了数据的储存和查找 myisaminnodb
  1. #设置客户端和服务器通讯的编码
  2. MariaDB [data]> set names gbk;
  3. Query OK, 0 rows affected (0.000 sec)
  4. #创建简单的表
  5. MariaDB [data]> create table stu1(
  6. -> id int auto_increment primary key,
  7. -> bane varchar(20) not null
  8. -> )engine=innodb ;
  9. Query OK, 0 rows affected (0.008 sec)
  10. #创建复杂的表
  11. MariaDB [data]> create table stu2(
  12. -> id int auto_increment primary key comment '主键',
  13. -> name varchar(20) not null comment '姓名',
  14. -> score int default '0' comment '成绩可以为空'
  15. -> )engine=innodb;
  16. Query OK, 0 rows affected (0.007 sec)

小结:

  1. 如果不指定引擎,默认是innodb

  2. 如果不指定编码,默认和数据库一样

    • ​ innodb 一个表对应一个表结构,innodb的所有表的数据都保存在ibdatak文件中,如果数据量很大,会自动创建ibdata2、ibdata3···

      | 引擎 | |
      | ——— | —————————————————————————————— |
      | myisam | 查询速度快、容易产生碎片、不能约束数据 |
      | innodb | 以前没有myisam速度快,现在已经提速了、不产生碎片、可以约束数据 |

      推荐使用innodb。

显示创建表的语句

语法:

  1. show create table; --结果横着排列
  2. show create table stu2\G; --结果竖着排列
查看表结构

语法:

  1. desc[ribe] stu2;
  1. MariaDB [data]> decsribe stu2;
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'decsribe stu2' at line 1
  3. MariaDB [data]> describe stu2;
  4. +-------+-------------+------+-----+---------+----------------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +-------+-------------+------+-----+---------+----------------+
  7. | id | int(11) | NO | PRI | NULL | auto_increment |
  8. | name | varchar(20) | NO | | NULL | |
  9. | score | int(11) | YES | | 0 | |
  10. +-------+-------------+------+-----+---------+----------------+
  11. 3 rows in set (0.002 sec)
删除表

语法:

  1. drop table [if exists] stu4,stu3,stu2;
  1. #删除一个表
  2. MariaDB [data]> drop table if exists sut4;
  3. Query OK, 0 rows affected, 1 warning (0.000 sec)
  4. #删除多个表
  5. MariaDB [data]> drop table if exists sut4,stu3;
  6. Query OK, 0 rows affected, 2 warnings (0.000 sec)
复制表

语法一:

  1. create table stu3 select id form stu2;
  1. #不能复制主键,只能复制数据

语法二:

  1. create table stu4 like stu2;
  1. #只能复制表结构,不能复制数据

小结:*代表所有数据

修改表

语法:

  1. alter table stu2;
  1. 添加字段:alter table 表名add [column] 字段名 数据类型 [位置]

    ``mysql MariaDB [data]> alter table stu addadd` varchar(20); — 默认添加的字段放在末尾
    Query OK, 0 rows affected (0.007 sec)
    Records: 0 Duplicates: 0 Warnings: 0

MariaDB [data]> alter table stu add sex char(1) after name; — 放在某个之后
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [data]> alter table stu add age int first; — 放在最前面
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0

  1. 2. 删除字段:alter table 表名drop [column]字段名
  2. ```mysql
  3. MariaDB [data]> desc stu;
  4. +-------+-------------+------+-----+---------+-------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +-------+-------------+------+-----+---------+-------+
  7. | age | int(11) | YES | | NULL | |
  8. | id | int(11) | YES | | NULL | |
  9. | name | varchar(20) | YES | | NULL | |
  10. | sex | char(1) | YES | | NULL | |
  11. | add | varchar(20) | YES | | NULL | |
  12. +-------+-------------+------+-----+---------+-------+
  13. 5 rows in set (0.001 sec)
  14. MariaDB [data]> alter table stu drop age; -- 删除字段
  15. Query OK, 0 rows affected (0.010 sec)
  16. Records: 0 Duplicates: 0 Warnings: 0
  17. MariaDB [data]> desc stu;
  18. +-------+-------------+------+-----+---------+-------+
  19. | Field | Type | Null | Key | Default | Extra |
  20. +-------+-------------+------+-----+---------+-------+
  21. | id | int(11) | YES | | NULL | |
  22. | name | varchar(20) | YES | | NULL | |
  23. | sex | char(1) | YES | | NULL | |
  24. | add | varchar(20) | YES | | NULL | |
  25. +-------+-------------+------+-----+---------+-------+
  26. 4 rows in set (0.001 sec)
  1. 修改字段(改名):alter table 表change[column]原字段名 新字段名 数据类型

    ```mysql
    — 将name字段改为stuname

    MariaDB [data]> alter table stu change name stuname varchar(20);
    Query OK, 0 rows affected (0.007 sec)
    Records: 0 Duplicates: 0 Warnings: 0

    MariaDB [data]> desc stu

    1. -> ;

    +————-+——————-+———+——-+————-+———-+
    | Field | Type | Null | Key | Default | Extra |
    +————-+——————-+———+——-+————-+———-+
    | id | int(11) | YES | | NULL | |
    | stuname | varchar(20) | YES | | NULL | |
    | sex | char(1) | YES | | NULL | |
    | add | varchar(20) | YES | | NULL | |
    +————-+——————-+———+——-+————-+———-+
    4 rows in set (0.001 sec)

  1. 4. 修改字段:alter table modify 字段名 字段属性·
  2. ```mysql
  3. -- 将sex数据类型更改为varchar(20)
  4. MariaDB [data]> alter table stu modify sex varchar(20);
  5. Query OK, 0 rows affected (0.015 sec)
  6. Records: 0 Duplicates: 0 Warnings: 0
  7. MariaDB [data]> desc stu;
  8. +---------+-------------+------+-----+---------+-------+
  9. | Field | Type | Null | Key | Default | Extra |
  10. +---------+-------------+------+-----+---------+-------+
  11. | id | int(11) | YES | | NULL | |
  12. | stuname | varchar(20) | YES | | NULL | |
  13. | sex | varchar(20) | YES | | NULL | |
  14. | add | varchar(20) | YES | | NULL | |
  15. +---------+-------------+------+-----+---------+-------+
  16. 4 rows in set (0.001 sec)
  17. -- 将add数据类型更改为varchar(20)默认值‘where?’
  18. MariaDB [data]> alter table stu modify `add` varchar(20) default 'where?';
  19. Query OK, 0 rows affected (0.006 sec)
  20. Records: 0 Duplicates: 0 Warnings: 0
  21. MariaDB [data]> desc stu;
  22. +---------+-------------+------+-----+---------+-------+
  23. | Field | Type | Null | Key | Default | Extra |
  24. +---------+-------------+------+-----+---------+-------+
  25. | id | int(11) | YES | | NULL | |
  26. | stuname | varchar(20) | YES | | NULL | |
  27. | sex | varchar(20) | YES | | NULL | |
  28. | add | varchar(20) | YES | | where? | |
  29. +---------+-------------+------+-----+---------+-------+
  30. 4 rows in set (0.001 sec)
  1. 修改引擎:later table 表名engine= 引擎名

    1. -- 修改表的引擎
    2. MariaDB [data]> alter table stu engine=myisam;
    3. Query OK, 0 rows affected (0.008 sec)
    4. Records: 0 Duplicates: 0 Warnings: 0
  2. 修改表名 alter table 表名 rename 新表名

    1. -- 将表名改为新表名
    2. MariaDB [data]> alter table stu rename stu1;
    3. Query OK, 0 rows affected (0.000 sec)
    4. MariaDB [data]> show tables;
    5. +----------------+
    6. | Tables_in_data |
    7. +----------------+
    8. | stu1 |
    9. +----------------+
    10. 1 row in set (0.000 sec)
  3. 将表移动到其他数据库

    1. -- 将当前数据库的表移动到目标数据库
    2. MariaDB [data]> alter table stu rename to php.stu;
    3. Query OK, 0 rows affected (0.001 sec)

数据操作

插入数据

语法:insert into

  1. -- 插入数据,nullyes时可以为空
  2. MariaDB [php]> insert into stu (id,stuname,sex,`add`) values (1,'tom','man','beijing');
  3. Query OK, 1 row affected (0.004 sec)
  1. -- 插入控值为null
  2. -- 插入默认值为default
  3. MariaDB [php]> insert into stu values(5,'jake',null,default);
  4. Query OK, 1 row affected (0.000 sec)
  5. MariaDB [php]> select * from stu;
  6. +------+---------+-------+-----------+
  7. | id | stuname | sex | add |
  8. +------+---------+-------+-----------+
  9. | 1 | tom | man | beijing |
  10. | 2 | jerry | woman | beijing |
  11. | 3 | ros | woman | chongqing |
  12. | 5 | jake | NULL | where? |
  13. +------+---------+-------+-----------+
  14. 4 rows in set (0.000 sec)

小结:

  1. 插入字段名的顺序和表中的顺序可以不一致
  2. 插入值的个数、顺序必须和插入字段名的个数、顺序要一致
更新数据

语法:update 表名 set 字段=值[where条件]

  1. -- tom的性别给为woman
  2. -- 多个链接
  3. MariaDB [php]> update stu set sex='woman' where stuname='tom';
  4. Query OK, 1 row affected (0.000 sec)
  5. Rows matched: 1 Changed: 1 Warnings: 0
  6. MariaDB [php]> select * from stu;
  7. +------+---------+-------+-----------+
  8. | id | stuname | sex | add |
  9. +------+---------+-------+-----------+
  10. | 1 | tom | woman | beijing |
  11. | 2 | jerry | woman | beijing |
  12. | 3 | ros | woman | chongqing |
  13. | 5 | jake | NULL | where? |
  14. | 6 | 李白 | man | hunan |
  15. | 7 | 杜甫 | man | wuhan |
  16. +------+---------+-------+-----------+
  17. 6 rows in set (0.000 sec)
删除数据

语法:delete from 表名[where条件]

  1. -- 删除stunametom的数据
  2. MariaDB [php]> delete from stu where stuname='tom';
  3. Query OK, 1 row affected (0.000 sec)
  4. MariaDB [php]> select * from stu;
  5. +------+---------+-------+-----------+
  6. | id | stuname | sex | add |
  7. +------+---------+-------+-----------+
  8. | 2 | jerry | woman | beijing |
  9. | 3 | ros | woman | chongqing |
  10. | 5 | jake | NULL | where? |
  11. | 6 | 李白 | man | hunan |
  12. | 7 | 杜甫 | man | wuhan |
  13. +------+---------+-------+-----------+
  14. 5 rows in set (0.000 sec)

技巧:

  1. delete from :遍历记录,一条一条删除
  2. truncate table :删除表在重新建立表结构(效率更高)
查询数据

语法:

  1. select 列名 from 表名
  1. -- stu查询id数据
  2. MariaDB [php]> select id,stuname from stu;
  3. Empty set (0.000 sec)
数据传输是使用的

发现:插入数据的时候,如果有中文会报错或者无法插入

可用set names utf8;直接更改client、connection、result

设置什么编码取决于客户端的编码

查看客户端发送的编码

查看服务器接受,返回的编码

  1. MariaDB [(none)]> show variables like 'character_set_%';
  1. -- 更改编码
  2. MariaDB [(none)]> set character_set_client=utf8;
  3. Query OK, 0 rows affected (0.000 sec)
校对集
  1. collate = 校对集 #创建表时可加入

校对集规则

_bin 区分大小写

_ci 不区分大小写

补充

严格模式

  1. sql-mode="...,STRICT_TRANS_TABLES"

插入数据时主键冲突

  1. -- 语法一
  2. replace into stu values (id, 'name')
  3. # 原理:如果插入的主键不重复就直接插入,如果主键重复就替换(删除原来的记录,插入新记录)
  4. -- 语法二
  5. on duplicate key update #当插入的值与主键冲突,执行 update操作
  6. # 插入的数据和主键或唯一键起冲突,更新字段内容
  1. delimiter // -- 改变定界符

数据类型


数值型

mysql中的数据类型是强类型

整数
整型 占用字节 范围 无符号
tinyint 1 -128~127 0-256
samllint 2 -32768~32767
mwdiumint 3 -8388608~8388607
int 4 -247483648~2147483647
bigint 8 -9223372036854775808~9223372036854775807

例题:

  1. -- 数据类型:选择范围尽量的小,占用的资源就小
  2. MariaDB [learn]> create table stu;
  3. ERROR 1113 (42000): A table must have at least 1 column
  4. MariaDB [learn]> create table stu(
  5. -> id tinyint,
  6. -> name varchar(20)
  7. -> );
  8. Query OK, 0 rows affected (0.112 sec)

无符号整型(unsigned) 无符号整型就是没有负数,是整数的两倍

整型支持显示宽度,显示宽度是最小的显示位数,如int(11)表示最小占用11位表示,可用zerofill填充

  1. MariaDB [learn]> create table stu1(
  2. -> id tinyint unsigned,
  3. -> num int(5) zerofill
  4. -> );
  5. Query OK, 0 rows affected (0.006 sec)
  6. MariaDB [learn]> insert into stu1 values (12,12);
  7. Query OK, 1 row affected (0.001 sec)
  8. MariaDB [learn]> select * from stu1;
  9. +------+-------+
  10. | id | num |
  11. +------+-------+
  12. | 12 | 00012 |
  13. +------+-------+
  14. 1 row in set (0.000 sec)
单词 意思
nity 微小的
medium 中间的
big 大的
unsigned 无符号的
浮点型
浮点型
float 4
double 8

浮点型的声明:float(m,d)、 double(m,d)

  1. m:总位数 d:小数位数
  1. -- mysql支持科学计数法
  2. MariaDB [learn]> insert into stu2 values (5E10),(7E-6);
  3. Query OK, 2 rows affected (0.001 sec)
  4. Records: 2 Duplicates: 0 Warnings: 0
  5. MariaDB [learn]> select * from stu2;
  6. +-------------+
  7. | id |
  8. +-------------+
  9. | 50000000000 |
  10. | 0.000007 |
  11. +-------------+
  12. 2 rows in set (0.000 sec)
  1. -- 浮动数精度会丢失
  2. MariaDB [learn]> insert into stu2 values (99.9999999999);
  3. Query OK, 1 row affected (0.000 sec)
  4. MariaDB [learn]> select * from stu2;
  5. +------+
  6. | id |
  7. +------+
  8. | 100 |
  9. +------+
  10. 1 row in set (0.000 sec)
定点数(小数)

原理:将小数部分和整数部分分开存储

语法:

  1. decimal(m,d)

例题:

  1. MariaDB [learn]> alter table stu3 modify num decimal(20,11);
  2. Query OK, 0 rows affected (0.013 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. MariaDB [learn]> insert into stu3 values (12.99999999999);
  5. Query OK, 1 row affected (0.001 sec)
  6. MariaDB [learn]> select * from stu3;
  7. +----------------+
  8. | num |
  9. +----------------+
  10. | 12.99999999999 |
  11. +----------------+
  12. 1 row in set (0.000 sec)
  1. deciaml是变长的,m最大为65d最大时30,默认为(102
  2. 定点数和浮点数都支持无符号和zerofill

字符型

在数据库中没有字符串概念,只有字符

数据类型 描述
char 定长字符,最大可到255
varchar 可变长字符, 最大可到65535
tinytext 8个字节
text 16个字节
mediumtext 24个字节
longtext 32个字节
  1. 变长字符的剩余空间会自动回收
  1. 一条整个记录的所有字段的总长度不能超过65535
  1. text系列的类型在表中储存的是地址,占用大约10个字节

枚举(enum)

从集合中选择一个值作为数据(单选)

  1. MariaDB [learn]> create table stu4(
  2. -> name varchar(20),
  3. -> sex enum('男','女','保密') #枚举
  4. -> );
  5. Query OK, 0 rows affected (0.006 sec)
  6. MariaDB [learn]> insert into stu4 values ('tom', '男');
  7. -- 插入值部位每句集合中的数据会报错
  8. Query OK, 1 row affected (0.001 sec)
  9. MariaDB [learn]> select * from stu4;
  10. +------+------+
  11. | name | sex |
  12. +------+------+
  13. | tom | |
  14. +------+------+
  15. 1 row in set (0.000 sec)
  1. 枚举值是通过整型数字来管理的
  1. MariaDB [learn]> insert into stu4 values ('berry', 2);
  2. Query OK, 1 row affected (0.000 sec)
  3. MariaDB [learn]> select * from stu4;
  4. +-------+------+
  5. | name | sex |
  6. +-------+------+
  7. | tom | |
  8. | berry | |
  9. +-------+------+
  10. 2 rows in set (0.000 sec)
  1. 限制值
  2. 节省空间
  3. 运行速度快
  1. 思考:枚举占用两个字节,所以枚举最多有65536,范围是(0-65535),由于枚举从1开始,枚举最多65535

集合(set)

从集合中选择一个值作为数据(多选)

  1. MariaDB [learn]> alter table stu3 add hobby set ('爬山','游泳','睡觉','吃饭');
  2. Query OK, 0 rows affected (0.006 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. MariaDB [learn]> insert into stu3 values (12.00,'admin','游泳,爬山');
  5. Query OK, 1 row affected (0.000 sec)
  6. MariaDB [learn]> select * from stu3 ;
  7. +----------------+-------+---------------+
  8. | num | name | hobby |
  9. +----------------+-------+---------------+
  10. | 12.00000000000 | admin | 爬山,游泳 |
  11. +----------------+-------+---------------+
  12. 1 row in set (0.000 sec)
  13. MariaDB [learn]>
  1. 集合和枚举一样,为每个集合属性分配一个固定值,分配方式是从前往后按2012、、、次方,转换为二进制的只有一位是1,其他都是0
  1. '爬山','游泳','睡觉','吃饭'
  2. MariaDB [learn]> select * from stu3 ;
  3. +----------------+-------+---------------+
  4. | num | name | hobby |
  5. +----------------+-------+---------------+
  6. | 12.00000000000 | admin | 爬山,游泳 |
  7. +----------------+-------+---------------+
  8. 1 row in set (0.000 sec)
  9. MariaDB [learn]> select hobby+0 from stu3;
  10. +---------+
  11. | hobby+0 |
  12. +---------+
  13. | 3 |
  14. +---------+
  15. 1 row in set (0.000 sec)
  1. 集合占8个字节,最多可以有64个选项

日期时间型

数据类型 占用
datetime 日期时间占用8个字节
date 日期占用3个字节
time 时间占用3个字节
year 年份占用1个字节
timestamp 时间戳占用4个字节

boolean

  1. mysql不支持布尔型,存储为10
  2. boolean型在mysql中对应tinyint

列属性

是否为空(null|not null)
  1. null表示字段值可以为空
  2. not null 表示字段值不能为空
默认值(default)
  1. 可以用default关键字,替代默认值。
自动增长(auto_increment)
  1. 字段值从1开始,每次递增1,自动增长不会有重复,适合用来生成唯一的id。在mysql中只要是自动增长列必须为主键。
主键(primary key)
  1. 唯一标示表中的记录的一个或一组列称为主键
  2. 特点:
  3. 不能重复、不能为空
  4. 一个表只能有一个主键
  5. 作用:
  6. 保证数据完整性
  7. 加快查询速度
  8. 选择主键的原则
  9. 最少性:尽量选单个键作为主键
  10. 稳定性:尽量选择数值更新少的列作为主键
  1. -- 创建主键方法一
  2. MariaDB [learn]> create table stu3(
  3. -> id int auto_increment primary key,
  4. -> name varchar(20)
  5. -> );
  6. Query OK, 0 rows affected (0.006 sec)
  7. -- 创建主键的方法二
  8. MariaDB [learn]> create table stue(
  9. -> id int ,
  10. -> name varchar(20),
  11. -> primary key(id)
  12. -> );
  13. Query OK, 0 rows affected (0.006 sec)
  14. -- 组合键创建主键方法
  15. MariaDB [learn]> create table stu3(
  16. -> classname char,
  17. -> name varchar(20),
  18. -> primary key(classname,name)
  19. -> );
  20. Query OK, 0 rows affected (0.006 sec)
  21. MariaDB [learn]> desc stu3;
  22. +-----------+-------------+------+-----+---------+-------+
  23. | Field | Type | Null | Key | Default | Extra |
  24. +-----------+-------------+------+-----+---------+-------+
  25. | classname | char(1) | NO | PRI | NULL | |
  26. | name | varchar(20) | NO | PRI | NULL | |
  27. +-----------+-------------+------+-----+---------+-------+
  28. 2 rows in set (0.002 sec)
  1. #添加主键
  2. MariaDB [learn]> alter table sut3 add primary key (id);
  3. Query OK, 0 rows affected (0.008 sec)
  4. Records: 0 Duplicates: 0 Warnings: 0
  5. MariaDB [learn]> desc sut3;
  6. +-------+-------------+------+-----+---------+-------+
  7. | Field | Type | Null | Key | Default | Extra |
  8. +-------+-------------+------+-----+---------+-------+
  9. | id | int(11) | NO | PRI | NULL | |
  10. | name | varchar(20) | NO | | NULL | |
  11. +-------+-------------+------+-----+---------+-------+
  12. 2 rows in set (0.001 sec)
  13. #删除主键
  14. MariaDB [learn]> alter table sut3 drop primary key ;
  15. Query OK, 0 rows affected (0.021 sec)
  16. Records: 0 Duplicates: 0 Warnings: 0
  17. MariaDB [learn]> desc sut3;
  18. +-------+-------------+------+-----+---------+-------+
  19. | Field | Type | Null | Key | Default | Extra |
  20. +-------+-------------+------+-----+---------+-------+
  21. | id | int(11) | NO | | NULL | |
  22. | name | varchar(20) | NO | | NULL | |
  23. +-------+-------------+------+-----+---------+-------+
  24. 2 rows in set (0.001 sec)
  1. 小结:
  2. 1. 只要是auto_increment必须是主键,但是主键不一定auto_increment
  3. 2. 主键的特点是不能重复不能为空
  4. 3. 一个表只能有一个主键,但是一个主键可以有多个字段组成
  5. 4. 自动增长列通过插入null值让其递增
  6. 5. 自动增长列的数据被删除,默认不再重复使用。truncate table 删除数据就会从1开始。
唯一键(unique)
区别
主键 不能重复,不能为空<br />一个表只能有一个主键
唯一键 不能重复,可以为空<br />一个表可以有多个唯一键
  1. -- 创建唯一键
  2. MariaDB [learn]> create table stu3(
  3. -> id int auto_increment primary key,
  4. -> name varchar(20) unique -- 唯一键
  5. -> );
  6. Query OK, 0 rows affected (0.006 sec)
  7. -- 方法二
  8. MariaDB [learn]> create table stu3(
  9. -> id int ,
  10. -> name varchar(20)
  11. -> ,unique (name)
  12. -> );
  13. Query OK, 0 rows affected (0.007 sec)
  14. -- 修改表添加唯一键
  15. -- 添加多个用,分开
  16. MariaDB [learn]> alter table stu3 add unique (id);
  17. Query OK, 0 rows affected (0.007 sec)
  18. Records: 0 Duplicates: 0 Warnings: 0
  19. -- 查看唯一键的名字
  20. MariaDB [learn]> show create table stu3\G;
  21. *************************** 1. row ***************************
  22. Table: stu3
  23. Create Table: CREATE TABLE `stu3` (
  24. `id` int(11) DEFAULT NULL,
  25. `name` varchar(20) DEFAULT NULL,
  26. UNIQUE KEY `id` (`id`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  28. 1 row in set (0.000 sec)
  29. -- 通过唯一键的名字删除唯一键
  30. MariaDB [learn]> alter table stu3 drop index name;
  31. Query OK, 0 rows affected (0.007 sec)
  32. Records: 0 Duplicates: 0 Warnings: 0
备注(comment)
  1. 说明性文本
  2. 属于SQL代码的一部分

SQL注释

  1. MariaDB [learn]> create table stu4(
  2. -> id int primary key, -- 主键
  3. -> name varchar(20) not null, #姓名
  4. -> sex tinyint
  5. -> )
  6. -> /*
  7. /*> 这是一个学生表
  8. /*> */

数据完整性

实体完整性
  1. 主键约束
  2. 唯一约束
  3. 标识符
域完整性
  1. 数据类型约束
  2. 非空约束
  3. 默认值约束
引用完整性
  1. 主外键约束
自定义完整性
  1. 储存过程
  2. 触发器
主表和从表
  1. 主表中没有的记录,从表不允许插入
  2. 从表中有的记录,主表不允许删除
外键(foreign key)
  1. 从表中的公共字段。
  2. alter table 从表 foreign 从表公共字段 references 主表公共字段
  3. alter table 从表 drop foreign key 外键的名字
  4. 小结:
  5. 只有innodb才能支持外键
  6. 公共字段的名字可以不一样,但数据类型要一样。
外键操作
  1. 严格限制

  2. 置空操作(set null )

    1. foreign 从表公共字段 references 主表公共字段 on delete set null
  1. 级联操作(cascade)

    1. foreign 从表公共字段 references 主表公共字段 on update cascade
  1. 小结:
  2. 置空、级联操作中外键不能是从表的主键

实体之间的关系

一对多(多对一)
  1. 主表中的一条记录对应从表中的多条记录
  2. 实现一对多的关系:主键和非主键建立关系
  3. 例子:
  4. 班主任表--学生表
  5. 品牌表--商品表

一对一
  1. 主表中的一条记录对应从表中的一条记录
  2. 实现一对一的关系:主键和主键键了关系
  3. 一个表为什么分成两个表:

多对多
  1. 非主键和非主键之间的关系
  2. 实现:引入第三方关系表

数据库设计

数据库设计的步骤
  1. 收集信息:充分理解数据库需要完成的任务
  2. 标识对象:标识数据库要管理的关键对象或实体
  3. 标识每个实体的属性
  4. 标识对象之间的关系
  5. 将模型转换成数据库
  6. 规范化
绘制E-R实体关系图

image-20200603154854318

将E-R实体关系表转换为表
  1. 实体对应表
  2. 属性对应字段
  3. 如果没有合适的主键,可以添加一个自增长键。

数据规范化

第一范式
  1. 确保每列的原子性,一个字段表示一个信息
第二范式
  1. 非主键要依赖于主键
第三范式
  1. 非主键之间不能有效应关系
反3NF
  1. 性能比规范化更重要

查询语句

  1. 语法:select [选项] 列名 [from表名][where条件][group by 分组][order by 排序][having 条件][limit限制]
字段表达式
  1. -- 可以直接输出内容
  2. MariaDB [book]> select 10*10;
  3. +-------+
  4. | 10*10 |
  5. +-------+
  6. | 100 |
  7. +-------+
  8. 1 row in set (0.000 sec)
  9. -- 可以输出表达式
  10. MariaDB [book]> select ch,math,ch+math from stu;
  11. +------+------+---------+
  12. | ch | math | ch+math |
  13. +------+------+---------+
  14. | 80 | NULL | NULL |
  15. | 77 | 76 | 153 |
  16. | 55 | 82 | 137 |
  17. | NULL | 74 | NULL |
  18. | 72 | 56 | 128 |
  19. | 86 | 92 | 178 |
  20. | 74 | 67 | 141 |
  21. | 65 | 67 | 132 |
  22. | 88 | 77 | 165 |
  23. +------+------+---------+
  24. 9 rows in set (0.000 sec)
  25. -- 表达式部分可以用函数
  26. MariaDB [book]> select rand();
  27. +--------------------+
  28. | rand() |
  29. +--------------------+
  30. | 0.3300995624904517 |
  31. +--------------------+
  32. 1 row in set (0.000 sec)
通过as区别名
  1. MariaDB [book]> select ch,math,ch+math as '总分' from stu;
  2. +------+------+--------+
  3. | ch | math | 总分 |
  4. +------+------+--------+
  5. | 80 | NULL | NULL |
  6. | 77 | 76 | 153 |
  7. | 55 | 82 | 137 |
  8. | NULL | 74 | NULL |
  9. | 72 | 56 | 128 |
  10. | 86 | 92 | 178 |
  11. | 74 | 67 | 141 |
  12. | 65 | 67 | 132 |
  13. | 88 | 77 | 165 |
  14. +------+------+--------+
  15. 9 rows in set (0.000 sec)
  16. -- as可以省略的
  17. MariaDB [book]> select ch,math,ch+math '总分' from stu;
  18. +------+------+--------+
  19. | ch | math | 总分 |
  20. +------+------+--------+
  21. | 80 | NULL | NULL |
  22. | 77 | 76 | 153 |
  23. | 55 | 82 | 137 |
  24. | NULL | 74 | NULL |
  25. | 72 | 56 | 128 |
  26. | 86 | 92 | 178 |
  27. | 74 | 67 | 141 |
  28. | 65 | 67 | 132 |
  29. | 88 | 77 | 165 |
  30. +------+------+--------+
  31. 9 rows in set (0.000 sec)
from子句

from:来自,from后面跟的原可以有多个源,返回笛卡尔积。

dual伪表

dual伪表是为乐保持语句完整性

where子句

跟条件,在数据源中进行筛选

  1. -- 查询大于等于
  2. MariaDB [book]> select * from stu where ch >= 60;
  3. +--------+--------------+--------+--------+---------+------------+------+------+
  4. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  5. +--------+--------------+--------+--------+---------+------------+------+------+
  6. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL |
  7. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 |
  8. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  9. | s25318 | 争青小子 | | 26 | 6 | 天津 | 86 | 92 |
  10. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  11. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 |
  12. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  13. +--------+--------------+--------+--------+---------+------------+------+------+
  14. 7 rows in set (0.001 sec)
  15. -- 查询大于等于
  16. MariaDB [book]> select * from stu where ch >= 60 and math >=60;
  17. +--------+--------------+--------+--------+---------+------------+------+------+
  18. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  19. +--------+--------------+--------+--------+---------+------------+------+------+
  20. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 |
  21. | s25318 | 争青小子 | | 26 | 6 | 天津 | 86 | 92 |
  22. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  23. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 |
  24. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  25. +--------+--------------+--------+--------+---------+------------+------+------+
  26. 5 rows in set (0.000 sec)
  27. -- 查询需要或语句
  28. MariaDB [book]> select * from stu where ch < 60 or math <60;
  29. +--------+--------------+--------+--------+---------+------------+------+------+
  30. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  31. +--------+--------------+--------+--------+---------+------------+------+------+
  32. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  33. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  34. +--------+--------------+--------+--------+---------+------------+------+------+
  35. 2 rows in set (0.000 sec)
group by「分组查询」

将查询的结果分组,分组查询目的在于统计数据

  1. MariaDB [book]> select stusex,avg(ch) '平均分' from stu group by stusex;
  2. +--------+-----------+
  3. | stusex | 平均分 |
  4. +--------+-----------+
  5. | | 72.2500 |
  6. | | 77.0000 |
  7. +--------+-----------+
  8. 2 rows in set (0.001 sec)
  9. -- --------
  10. MariaDB [book]> select stuaddress,count(*) from stu group by stuaddress;
  11. +------------+----------+
  12. | stuaddress | count(*) |
  13. +------------+----------+
  14. | 上海 | 1 |
  15. | 北京 | 3 |
  16. | 天津 | 2 |
  17. | 河北 | 2 |
  18. | 河南 | 1 |
  19. +------------+----------+
  20. 5 rows in set (0.000 sec)

通过group_concat()函数将同一组的值连接起来

  1. MariaDB [book]> select group_concat(stuname),stusex,avg(math) from stu group by stusex;
  2. +---------------------------------------------------+--------+-----------+
  3. | group_concat(stuname) | stusex | avg(math) |
  4. +---------------------------------------------------+--------+-----------+
  5. | 李斯文,诸葛丽丽,梅超风,Tabm | | 70.5000 |
  6. | 张秋丽,李文才,欧阳俊雄,争青小子,Tom | | 77.2500 |
  7. +---------------------------------------------------+--------+-----------+
  8. 2 rows in set (0.000 sec)
  1. 如果是分组字段,查询字段必须是分组字段和聚合函数
  2. 查询字段是普通字段,只取第一个值

多列分组

  1. MariaDB [book]> select stuaddress,stusex,avg(math) from stu group by stusex,stuaddress;
  2. +------------+--------+-----------+
  3. | stuaddress | stusex | avg(math) |
  4. +------------+--------+-----------+
  5. | 北京 | | 82.0000 |
  6. | 河北 | | 72.0000 |
  7. | 河南 | | 56.0000 |
  8. | 上海 | | 76.0000 |
  9. | 北京 | | 67.0000 |
  10. | 天津 | | 83.0000 |
  11. +------------+--------+-----------+
  12. 6 rows in set (0.000 sec)
order by排序

asc:升序

desc:降序

  1. 默认为升序
  1. -- 拿年龄的升序排序
  2. MariaDB [book]> select * from stu order by stuage asc;
  3. +--------+--------------+--------+--------+---------+------------+------+------+
  4. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  5. +--------+--------------+--------+--------+---------+------------+------+------+
  6. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL |
  7. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  8. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  9. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  10. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  11. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 |
  12. | s25318 | 争青小子 | | 26 | 6 | 天津 | 86 | 92 |
  13. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | NULL | 74 |
  14. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 |
  15. +--------+--------------+--------+--------+---------+------------+------+------+
  16. 9 rows in set (0.000 sec)
  17. -- 按总分排序
  18. MariaDB [book]> select *,ch+math '总分' from stu order by ch+math desc;
  19. +--------+--------------+--------+--------+---------+------------+------+------+--------+
  20. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math | 总分 |
  21. +--------+--------------+--------+--------+---------+------------+------+------+--------+
  22. | s25318 | 争青小子 | | 26 | 6 | 天津 | 86 | 92 | 178 |
  23. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 | 165 |
  24. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 | 153 |
  25. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 | 141 |
  26. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 | 137 |
  27. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 | 132 |
  28. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 | 128 |
  29. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL | NULL |
  30. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | NULL | 74 | NULL |
  31. +--------+--------------+--------+--------+---------+------------+------+------+--------+
  32. 9 rows in set (0.000 sec)
  1. -- 多列
  2. MariaDB [book]> select * from stu order by stuage asc,ch desc;
  3. +--------+--------------+--------+--------+---------+------------+------+------+
  4. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  5. +--------+--------------+--------+--------+---------+------------+------+------+
  6. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL |
  7. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  8. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  9. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  10. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  11. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 |
  12. | s25318 | 争青小子 | | 26 | 6 | 天津 | 86 | 92 |
  13. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | NULL | 74 |
  14. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 |
  15. +--------+--------------+--------+--------+---------+------------+------+------+
having条件
  1. 结果集中进行条件筛选
  1. MariaDB [book]> select * from stu where stusex='女';
  2. +--------+--------------+--------+--------+---------+------------+------+------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  4. +--------+--------------+--------+--------+---------+------------+------+------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  6. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  7. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  8. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  9. +--------+--------------+--------+--------+---------+------------+------+------+
  10. 4 rows in set (0.001 sec)
  11. -- ------
  12. MariaDB [book]> select * from stu having stusex='女';
  13. +--------+--------------+--------+--------+---------+------------+------+------+
  14. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  15. +--------+--------------+--------+--------+---------+------------+------+------+
  16. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  17. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | 72 | 56 |
  18. | s25319 | 梅超风 | | 23 | 5 | 河北 | 74 | 67 |
  19. | s25321 | Tabm | | 23 | 9 | 河北 | 88 | 77 |
  20. +--------+--------------+--------+--------+---------+------------+------+------+
  21. 4 rows in set (0.000 sec)
limit
  1. 语法:limit起始位置,显示长度
  1. MariaDB [book]> select * from stu limit 0,3;
  2. +--------+-----------+--------+--------+---------+------------+------+------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  4. +--------+-----------+--------+--------+---------+------------+------+------+
  5. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL |
  6. | s25302 | 李文才 | | 31 | 3 | 上海 | 77 | 76 |
  7. | s25303 | 李斯文 | | 22 | 2 | 北京 | 55 | 82 |
  8. +--------+-----------+--------+--------+---------+------------+------+------+
  9. 3 rows in set (0.001 sec)
  1. limit updatedelete语句中使用。
  1. MariaDB [book]> update stu set ch=ch+1 order by ch+math desc limit 3;
  2. Query OK, 3 rows affected (0.000 sec)
  3. Rows matched: 3 Changed: 3 Warnings: 0
查询语句的选项
  1. all 显示所有数据
  2. distinct:去除重复数据

聚合函数

  1. sum() 求和
  2. avg() 求平均值
  3. max() 求最大值
  4. min() 求最小值
  5. count() 求记录数

模糊查询

通配符
  1. _代表任意一个字符
  2. %代表任意字符
模糊查询(like)
  1. MariaDB [book]> select * from stu where stuname like 'T_m';
  2. +--------+---------+--------+--------+---------+------------+------+------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  4. +--------+---------+--------+--------+---------+------------+------+------+
  5. | s25320 | Tom | | 24 | 8 | 北京 | 65 | 67 |
  6. +--------+---------+--------+--------+---------+------------+------+------+
  7. 1 row in set (0.000 sec)
  8. MariaDB [book]> select * from stu where stuname like '张%';
  9. +--------+-----------+--------+--------+---------+------------+------+------+
  10. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | ch | math |
  11. +--------+-----------+--------+--------+---------+------------+------+------+
  12. | s25301 | 张秋丽 | | 18 | 1 | 北京 | 80 | NULL |
  13. +--------+-----------+--------+--------+---------+------------+------+------+
  14. 1 row in set (0.000 sec)

union(联合)

  1. 语法:select 语句 union [选项] select 语句 union [选项] select 语句
  2. 将多个select的语句的结果集纵向连接起来
  3. all:显示所有数据
  4. discinct:去除重复的数据(默认)
  5. 结果默认去除重复
  1. union 两边的select 语句的字段个数必须一致
  2. union 两边的select 语句的字段名可以不一样,按第一个select 语句的字段名
  3. union 两边的select 语句中的数据类型可以不一致

多表查询


内连接
  1. 规则:返回两个表的公共记录
  1. -- 语法一
  2. select * from 1 inner join 2 on 1.公共字段=表2.公共字段
  3. -- 语法二
  4. select * from 1,表2 where 1.公共字段=表2.公共字段
  1. -- inner join
  2. MariaDB [book]> select * from stuinfo inner join stumarks on stuinfo.stuno=stumarks.stuno;
  3. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  4. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | stuNo | writtenExam | labExam |
  5. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  6. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | s25303 | 80 | 58 |
  7. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | s25302 | 50 | 90 |
  8. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | s25304 | 65 | 50 |
  9. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | s25301 | 77 | 82 |
  10. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | s25318 | 56 | 48 |
  11. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  12. 5 rows in set (0.002 sec)
  13. -- where 联合查询
  14. MariaDB [book]> select * from stuinfo,stumarks where stuinfo.stuno=stumarks.stuno;
  15. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  16. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | stuNo | writtenExam | labExam |
  17. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  18. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | s25303 | 80 | 58 |
  19. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | s25302 | 50 | 90 |
  20. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | s25304 | 65 | 50 |
  21. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | s25301 | 77 | 82 |
  22. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | s25318 | 56 | 48 |
  23. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  24. 5 rows in set (0.000 sec)
  25. -- 取消重复显示方法
  26. MariaDB [book]> select stuinfo.stuno,stuname,stusex,stuage, stuseat,writtenexam,labexam from stuinfo,stumarks where stuinfo.stuno=stumarks.stuno;
  27. +--------+--------------+--------+--------+---------+-------------+---------+
  28. | stuno | stuname | stusex | stuage | stuseat | writtenexam | labexam |
  29. +--------+--------------+--------+--------+---------+-------------+---------+
  30. | s25303 | 李斯文 | | 22 | 2 | 80 | 58 |
  31. | s25302 | 李文才 | | 31 | 3 | 50 | 90 |
  32. | s25304 | 欧阳俊雄 | | 28 | 4 | 65 | 50 |
  33. | s25301 | 张秋丽 | | 18 | 1 | 77 | 82 |
  34. | s25318 | 争青小子 | | 26 | 6 | 56 | 48 |
  35. +--------+--------------+--------+--------+---------+-------------+---------+
  36. 5 rows in set (0.001 sec)
  1. 内联之中inner可以省略
  2. select * from 1 inner join 2 on 1.公共字段=表2.公共字段
  3. MariaDB [book]> select * from stuinfo join stumarks on stuinfo.stuno=stumarks.stuno;
  4. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  5. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | stuNo | writtenExam | labExam |
  6. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  7. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | s25303 | 80 | 58 |
  8. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | s25302 | 50 | 90 |
  9. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | s25304 | 65 | 50 |
  10. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | s25301 | 77 | 82 |
  11. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | s25318 | 56 | 48 |
  12. +--------+--------------+--------+--------+---------+------------+---------+--------+-------------+---------+
  13. 5 rows in set (0.000 sec)
  14. -- 表连接越多,效率越低
  15. -- 如何实现三表查询
  16. select * from 1 inner join 2 on 1.公共字段=表2.公共字段 inner join 3 on 2.公共字段=表3.公共字段
左外连接

规则:以左边的表为准,右边如果没有对应的记录用null显示

  1. 语法:select * from 1 left join 2 on 1.公共字段=表2.公共字段
  1. MariaDB [book]> select stuname,writtenexam,labexam from stuinfo left join stumarks on stuinfo.stuno=stumarks.stuno;
  2. +--------------+-------------+---------+
  3. | stuname | writtenexam | labexam |
  4. +--------------+-------------+---------+
  5. | 李斯文 | 80 | 58 |
  6. | 李文才 | 50 | 90 |
  7. | 欧阳俊雄 | 65 | 50 |
  8. | 张秋丽 | 77 | 82 |
  9. | 争青小子 | 56 | 48 |
  10. | 诸葛丽丽 | NULL | NULL |
  11. | 梅超风 | NULL | NULL |
  12. +--------------+-------------+---------+
  13. 7 rows in set (0.005 sec)
  1. select * from 1 left join 2 on 1.公共字段=表2.公共字段
  2. select * from 2 left join 1 on 1.公共字段=表2.公共字段 一样吗?
  3. 答:不一样,第一个SQL以表1为准,第二个SQL以表2为准。
右外连接

规则:以右边的表为准,左边如果没有对应的记录用null显示

  1. 语法:select * from 1 right join 2 on 1.公共字段=表2.公共字段
  1. MariaDB [book]> select stuinfo.stuname,writtenexam,labexam from stuinfo right join stumarks on stuinfo.stuno=stumarks.stuno;
  2. +--------------+-------------+---------+
  3. | stuname | writtenexam | labexam |
  4. +--------------+-------------+---------+
  5. | 李斯文 | 80 | 58 |
  6. | 李文才 | 50 | 90 |
  7. | 欧阳俊雄 | 65 | 50 |
  8. | 张秋丽 | 77 | 82 |
  9. | 争青小子 | 56 | 48 |
  10. | NULL | 66 | 77 |
  11. +--------------+-------------+---------+
  12. 6 rows in set (0.000 sec)
交叉连接

语法,返回笛卡尔积

  1. 语法:select * from 1 cross join 2
  1. -- 交叉连接
  2. mysql> select * from stuinfo cross join stumarks;
  3. -- 交叉连接有连接表达式与内连接是一样的
  4. mysql> select * from stuinfo cross join stumarks on stuinfo.stuno=stumarks.stuno;
  5. +--------+----------+--------+--------+---------+------------+---------+--------+-------------+---------+
  6. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | stuNo | writtenExam | labExam |
  7. +--------+----------+--------+--------+---------+------------+---------+--------+-------------+---------+
  8. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | s25303 | 80 | 58 |
  9. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | s25302 | 50 | 90 |
  10. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | s25304 | 65 | 50 |
  11. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | s25301 | 77 | 82 |
  12. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | s25318 | 56 | 48 |
  13. +--------+----------+--------+--------+---------+------------+---------+--------+-------------+---------+
  14. 5 rows in set (0.00 sec)
  1. 小结
  2. 1、交叉连接如果没有连接条件返回笛卡尔积
  3. 2、如果有连接条件和内连接是一样的。
自然连接
  1. 自动判断条件连接,判断的条件是依据同名字段
  2. 如果没同名字段返回笛卡尔积
  3. 同名字段只显示一个,并自动放在最前面
自然内连接
  1. natural join
  1. MariaDB [book]> select * from stuinfo natural join stumarks;
  2. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | writtenExam | labExam |
  4. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | 80 | 58 |
  6. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | 50 | 90 |
  7. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | 65 | 50 |
  8. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | 77 | 82 |
  9. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | 56 | 48 |
  10. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  11. 5 rows in set (0.000 sec)
自然左外连接
  1. natural left join
  1. MariaDB [book]> select * from stuinfo natural left join stumarks;
  2. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | writtenExam | labExam |
  4. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | 80 | 58 |
  6. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | 50 | 90 |
  7. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | 65 | 50 |
  8. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | 77 | 82 |
  9. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | 56 | 48 |
  10. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 | NULL | NULL | NULL |
  11. | s25319 | 梅超风 | | 23 | 5 | 河北 | NULL | NULL | NULL |
  12. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  13. 7 rows in set (0.000 sec)
自然右外连接
  1. natural right join
  1. MariaDB [book]> select * from stuinfo natural right join stumarks ;
  2. +--------+---------+-------------+---------+--------------+--------+--------+---------+------------+
  3. | stuNo | examNo | writtenExam | labExam | stuName | stuSex | stuAge | stuSeat | stuAddress |
  4. +--------+---------+-------------+---------+--------------+--------+--------+---------+------------+
  5. | s25303 | s271811 | 80 | 58 | 李斯文 | | 22 | 2 | 北京 |
  6. | s25302 | s271813 | 50 | 90 | 李文才 | | 31 | 3 | 上海 |
  7. | s25304 | s271815 | 65 | 50 | 欧阳俊雄 | | 28 | 4 | 天津 |
  8. | s25301 | s271816 | 77 | 82 | 张秋丽 | | 18 | 1 | 北京 |
  9. | s25318 | s271819 | 56 | 48 | 争青小子 | | 26 | 6 | 天津 |
  10. | s25320 | s271820 | 66 | 77 | NULL | NULL | NULL | NULL | NULL |
  11. +--------+---------+-------------+---------+--------------+--------+--------+---------+------------+
  12. 6 rows in set (0.000 sec)
using

用来指定连接字段

  1. MariaDB [book]> select * from stuinfo inner join stumarks using(stuno);
  2. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress | examNo | writtenExam | labExam |
  4. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 | s271811 | 80 | 58 |
  6. | s25302 | 李文才 | | 31 | 3 | 上海 | s271813 | 50 | 90 |
  7. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 | s271815 | 65 | 50 |
  8. | s25301 | 张秋丽 | | 18 | 1 | 北京 | s271816 | 77 | 82 |
  9. | s25318 | 争青小子 | | 26 | 6 | 天津 | s271819 | 56 | 48 |
  10. +--------+--------------+--------+--------+---------+------------+---------+-------------+---------+
  11. 5 rows in set (0.000 sec)
  1. using的结果也会对公共字段进行优化,优化的规则和自然连接一样

子查询

  1. 语法:select * from 1 where (子查询)
  2. 外面的查询称为父查询
  3. 子查询为父查询提供查询条件
标量子查询
  1. MariaDB [book]> select * from stuinfo where stuno=(select stuno from stumarks where writtenexam=80);
  2. +--------+-----------+--------+--------+---------+------------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  4. +--------+-----------+--------+--------+---------+------------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 |
  6. +--------+-----------+--------+--------+---------+------------+
  7. 1 row in set (0.002 sec)
  1. MariaDB [book]> select * from stuinfo where stuno=(select stuno from stumarks where writtenexam=(select max(writtenexam) from stumarks));
  2. +--------+-----------+--------+--------+---------+------------+
  3. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  4. +--------+-----------+--------+--------+---------+------------+
  5. | s25303 | 李斯文 | | 22 | 2 | 北京 |
  6. +--------+-----------+--------+--------+---------+------------+
  7. 1 row in set (0.001 sec)
列子查询
  1. 特点:返回值的是一列
  2. 如果子查询的结果为多条记录,用innot in
行子查询
  1. 特点:返回值为一行
表子查询
  1. 特点:将子查询作为表名
  2. 如果将子查询当成一个表来看,必须给结果集取别名
exists子查询
  1. 作用:提高查询效率

视图

概述
  1. 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上
  2. 视图中并不存放数据,而是存放在视图所引用的原始表(基表)中
  3. 同一张原始表,根据不同用户的不同需求,可以创建不同的视图
作用
  1. 筛选表中的行
  2. 防止未经许可的用户访问敏感数据
  3. 隐藏数据表的结构
  4. 降低数据表的复杂程度
创建视图
  1. 语法:
  2. -- 创建
  3. create view 试图名
  4. as
  5. select 语句;
  6. -- 查询视图
  7. select 列名 from 视图
修改视图
  1. -- 语法
  2. alter view 视图名
  3. as
  4. select 语句;
删除视图
  1. 语法
  2. drop view [if exists] 视图1,视图2
查看视图信息
  1. -- 查看所有的表和视图
  2. show tables
  3. -- 查看视图
  4. select table_name from information_schema.views #查看表和视图的详细状态信息
  5. show table status where comment='view'\G; #只查看视图信息
  6. -- 查看视图的结构信息
  7. desc view1
  8. -- 查看视图的创建语句
  9. show create view view1;
视图算法
  1. 视图的算法和表的算法不一样
  2. merge:合并算法
  3. temptable:临时表算法
  4. undefined:未定义算法(用哪种算法由mysql决定,这是默认算法,视图一般会选merge算法)
  5. 重新通过视图
  6. create or replace algorithm=tmptable view view3
  7. as
  8. select * from stu order by stusex;

事务

概述
  1. 事务(TRANSACTION)是一个整体,要么一起执行,要么一起不执行
事务特性
  1. 原子性:事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
  2. 一致性:当事务完成时,数据必须处于一致状态
  3. 隔离性:对数据进行修改的所有并发事务是彼此隔离的。
  4. 永久性:事务完成后,它对数据库的修改被永久保持。
事务处理
  1. -- 开启事务
  2. start transaction begin [work]
  3. -- 回滚事务
  4. rollback
  5. -- 提交事务
  6. commit
  7. -- 设置事务的回滚点
  8. savepoint
  9. -- 自动提交事务
  1. 事务是事务开始的时候开始
  2. 提交事务、回滚事务后事务结束
  3. 只有innodb支持事务
  4. 每个SQL语句都是一个事务

索引

概述
  1. 优点:
  2. 加快查询速度
  3. 缺点:
  4. 带索引的表在数据库中需要更多的存储空间
  5. 增、删、改命令需要更长的处理时间,因为他们需要对索引进行更新
创建索引
  1. 适合创建索引的列:
  2. 该列用于频繁搜索
  3. 该列用于对数据进行排序
  4. where\join出现的列
  5. 不适合创建索引的列:
  6. 列中仅包含几个值
  7. 表中仅包含几行,数据量很少
主键索引
  1. 创建了主键就会自动的创建主键索引

唯一索引

  1. 创建唯一键就创建了唯一索引
  2. create unique index ix_name on t5name
普通索引
  1. -- 创建表的时候添加普通索引

删除索引

  1. drop index 索引名 on 表名

函数

数字类

  1. -- rand()获取随机数
  2. MariaDB [book]> select * from stuinfo order by rand() limit 1;
  3. +--------+-----------+--------+--------+---------+------------+
  4. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  5. +--------+-----------+--------+--------+---------+------------+
  6. | s25301 | 张秋丽 | | 18 | 1 | 北京 |
  7. +--------+-----------+--------+--------+---------+------------+
  8. 1 row in set (0.000 sec)
  9. -- round() 四舍五入
  10. MariaDB [book]> select round(3.1415926,3);
  11. +--------------------+
  12. | round(3.1415926,3) |
  13. +--------------------+
  14. | 3.142 |
  15. +--------------------+
  16. 1 row in set (0.000 sec)
  17. -- truncate()截取数据
  18. MariaDB [book]> select truncate(3.1415926,3)
  19. -> ;
  20. +-----------------------+
  21. | truncate(3.1415926,3) |
  22. +-----------------------+
  23. | 3.141 |
  24. +-----------------------+
  25. 1 row in set (0.000 sec)
  26. -- ceil() 向上取整
  27. MariaDB [book]> select ceil(3.1415926)
  28. -> ;
  29. +-----------------+
  30. | ceil(3.1415926) |
  31. +-----------------+
  32. | 4 |
  33. +-----------------+
  34. 1 row in set (0.000 sec)
  35. -- floor 向下取整
  36. MariaDB [book]> select floor(3.9)
  37. -> ;
  38. +------------+
  39. | floor(3.9) |
  40. +------------+
  41. | 3 |
  42. +------------+
  43. 1 row in set (0.000 sec)
字符类
  1. -- 大小写转换
  2. mysql> select ucase('i name is tom') '转成大写',lcase('My Name IS TOM') '转成小写';
  3. +---------------+----------------+
  4. | 转成大写 | 转成小写 |
  5. +---------------+----------------+
  6. | I NAME IS TOM | my name is tom |
  7. +---------------+----------------+
  8. 1 row in set (0.00 sec)
  9. -- 截取字符串
  10. mysql> select left('abcdef',3) '从左边截取',right('abcdef',3) '从右边截取',substring('abcdef',2,3) '字符串';
  11. +------------+------------+--------+
  12. | 从左边截取 | 从右边截取 | 字符串 |
  13. +------------+------------+--------+
  14. | abc | def | bcd |
  15. +------------+------------+--------+
  16. 1 row in set (0.00 sec)
  17. -- 字符串相连
  18. mysql> select concat('中国','北京','顺义') '地址';
  19. +--------------+
  20. | 地址 |
  21. +--------------+
  22. | 中国北京顺义 |
  23. +--------------+
  24. 1 row in set (0.00 sec)
  25. mysql> select concat(stuname,'-',stusex) 信息 from stuinfo;
  26. +-------------+
  27. | 信息 |
  28. +-------------+
  29. | 张秋丽-男 |
  30. | 李文才-男 |
  31. | 李斯文-女 |
  32. | 欧阳俊雄-男 |
  33. | 诸葛丽丽-女 |
  34. | 争青小子-男 |
  35. | 梅超风-女 |
  36. +-------------+
  37. 7 rows in set (0.00 sec)
  38. -- coalesce(str1,str2) :str1有值显示str1,如果str1为空就显示str2
  39. -- 将成绩为空的显示为缺考
  40. mysql> select stuname,coalesce(writtenexam,'缺考'),coalesce(labexam,'缺考') from stuinfo natural left join stumarks;
  41. +----------+------------------------------+--------------------------+
  42. | stuname | coalesce(writtenexam,'缺考') | coalesce(labexam,'缺考') |
  43. +----------+------------------------------+--------------------------+
  44. | 张秋丽 | 77 | 82 |
  45. | 李文才 | 50 | 90 |
  46. | 李斯文 | 80 | 58 |
  47. | 欧阳俊雄 | 65 | 50 |
  48. | 诸葛丽丽 | 缺考 | 缺考 |
  49. | 争青小子 | 56 | 48 |
  50. | 梅超风 | 缺考 | 缺考 |
  51. +----------+------------------------------+--------------------------+
  52. 7 rows in set (0.02 sec)
  53. -- length():字节长度,char_length():字符长度
  54. mysql> select length('锄禾日当午') 字节,char_length('锄禾日当午') 字符;
  55. +------+------+
  56. | 字节 | 字符 |
  57. +------+------+
  58. | 10 | 5 |
  59. +------+------+
  60. 1 row in set (0.00 sec)
时间类
  1. -- 时间戳
  2. MariaDB [book]> select unix_timestamp();
  3. +------------------+
  4. | unix_timestamp() |
  5. +------------------+
  6. | 1591236240 |
  7. +------------------+
  8. 1 row in set (0.000 sec)
  9. -- 格式化时间戳
  10. MariaDB [book]> select from_unixtime(unix_timestamp());
  11. +---------------------------------+
  12. | from_unixtime(unix_timestamp()) |
  13. +---------------------------------+
  14. | 2020-06-04 10:05:22 |
  15. +---------------------------------+
  16. 1 row in set (0.000 sec)
  17. -- 获取当前格式化时间
  18. MariaDB [book]> select now();
  19. +---------------------+
  20. | now() |
  21. +---------------------+
  22. | 2020-06-04 10:05:47 |
  23. +---------------------+
  24. 1 row in set (0.000 sec)
  25. -- 获取年,月,日,小时,分钟,秒
  26. mysql> select year(now()) 年,month(now()) 月,day(now()) 日,hour(now()) 小时,minute(now()) 分钟,second(now())秒;
  27. +------+------+------+------+------+------+
  28. | | | | 小时 | 分钟 | |
  29. +------+------+------+------+------+------+
  30. | 2019 | 6 | 12 | 17 | 10 | 48 |
  31. +------+------+------+------+------+------+
  32. 1 row in set (0.00 sec)
  33. -- 星期,本年第几天;
  34. mysql> select dayname(now()) 星期,dayofyear(now()) 本年第几天;
  35. +-----------+------------+
  36. | 星期 | 本年第几天 |
  37. +-----------+------------+
  38. | Wednesday | 163 |
  39. +-----------+------------+
  40. 1 row in set (0.00 sec)
  41. MariaDB [book]> select monthname(now())
  42. -> ;
  43. +------------------+
  44. | monthname(now()) |
  45. +------------------+
  46. | June |
  47. +------------------+
  48. 1 row in set (0.000 sec)
  49. -- 日期相减
  50. mysql> select datediff(now(),'2010-08-08') 相距天数;
  51. +----------+
  52. | 相距天数 |
  53. +----------+
  54. | 3230 |
  55. +----------+
  56. 1 row in set (0.00 sec)
加密函数
  1. -- md5加密
  2. mysql> select md5('aa');
  3. +----------------------------------+
  4. | md5('aa') |
  5. +----------------------------------+
  6. | 4124bc0a9335c27f086f24ba207a4912 |
  7. +----------------------------------+
  8. 1 row in set (0.00 sec)
  9. -- sha加密
  10. mysql> select sha('aa');
  11. +------------------------------------------+
  12. | sha('aa') |
  13. +------------------------------------------+
  14. | e0c9035898dd52fc65c41454cec9c4d2611bfb37 |
  15. +------------------------------------------+
  16. 1 row in set (0.00 sec)

预处理

每个代码的段的执行都要经历:词法分析——语法分析——编译——执行

预编译一次,可以多次执行。用来解决一条SQL语句频繁执行的问题。

  1. 预处理语句:prepare 预处理名字 from sql语句’
  2. 执行预处理:execute 预处理名字 [using 变量]
不带参数的预处理
  1. -- 创建预处理
  2. mysql> prepare stmt from 'select * from stuinfo';
  3. Query OK, 0 rows affected (0.06 sec)
  4. Statement prepared
  5. -- 执行预处理
  6. mysql> execute stmt;
  7. +--------+----------+--------+--------+---------+------------+
  8. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  9. +--------+----------+--------+--------+---------+------------+
  10. | s25301 | 张秋丽 | | 18 | 1 | 北京 |
  11. | s25302 | 李文才 | | 31 | 3 | 上海 |
  12. | s25303 | 李斯文 | | 22 | 2 | 北京 |
  13. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 |
  14. | s25305 | 诸葛丽丽 | | 23 | 7 | 河南 |
  15. | s25318 | 争青小子 | | 26 | 6 | 天津 |
  16. | s25319 | 梅超风 | | 23 | 5 | 河北 |
  17. +--------+----------+--------+--------+---------+------------+
  18. 7 rows in set (0.00 sec)
带参数的预处理
  1. -- 创建带有位置占位符的预处理语句
  2. mysql> prepare stmt from 'select * from stuinfo where stuno=?' ;
  3. Query OK, 0 rows affected (0.00 sec)
  4. Statement prepared
  5. -- 调用预处理,并传参数
  6. mysql> delimiter //
  7. mysql> set @id='s25301';
  8. -> execute stmt using @id //
  9. Query OK, 0 rows affected (0.00 sec)
  10. +--------+---------+--------+--------+---------+------------+
  11. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  12. +--------+---------+--------+--------+---------+------------+
  13. | s25301 | 张秋丽 | | 18 | 1 | 北京 |
  14. +--------+---------+--------+--------+---------+------------+
  15. 1 row in set (0.00 sec)
传递多个参数
  1. mysql> prepare stmt from 'select * from stuinfo where stuage>? and stusex=?' //
  2. Query OK, 0 rows affected (0.00 sec)
  3. Statement prepared
  4. mysql> set @age=20;
  5. -> set @sex='男';
  6. -> execute stmt using @age,@sex //
  7. Query OK, 0 rows affected (0.00 sec)
  8. Query OK, 0 rows affected (0.00 sec)
  9. +--------+----------+--------+--------+---------+------------+
  10. | stuNo | stuName | stuSex | stuAge | stuSeat | stuAddress |
  11. +--------+----------+--------+--------+---------+------------+
  12. | s25302 | 李文才 | | 31 | 3 | 上海 |
  13. | s25304 | 欧阳俊雄 | | 28 | 4 | 天津 |
  14. | s25318 | 争青小子 | | 26 | 6 | 天津 |
  15. +--------+----------+--------+--------+---------+------------+
  16. 3 rows in set (0.00 sec)
  1. 小结:
  2. 1MySQL中变量以@开头
  3. 2、通过set给变量赋值
  4. 3、?是位置占位符

数据库备份与还原

  1. 数据库中的数据需要定期备份
数据备份
  1. mysqldump 数据库连接 数据库 > SQL文件备份地址
  1. -- data数据库中所有的表导出到data.sql
  2. F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot data>c:\data.sql
  3. -- data数据库中的stuinfostumarks
  4. F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot data stuinfo stumarks>c:\data.sql
  5. -- 导出data数据库,导出的语句中带有创建数据库的语法
  6. F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot -B data>c:\data1.sql
数据还原
  1. mysql> source c:/data.sql;
  2. 注意:地址分隔符用斜线,不能用反斜线
  3. mysql 连接数据库 导入的数据库名 < 导入的SQL文件
  4. mysql -uroot -proot data1 < c:\data.sql
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post