MySQL知识
1、初识MySQL
- 启动服务
本地启动 (管理员模式打开cmd)
切换到mysql/bin目录
1
net start mysql
phpstudy启动
直接点击启动
登陆账号
1
mysql -u [用户名] -p
例子:
1
mysql -u root -p123456
- p后面不能加空格,直接输入密码
- 也可以不带内容直接-p,之后再单独输入密码
退出连接
1
exit;
结束服务
本地结束
1
net stop mysql
phpstudy结束
直接点击停止
2、操作数据库
1、数据库 > 数据库中的表 > 数据库中的表的数据
创建数据库
1
create database [if not exists] [库名]
删除数据库
1
drop database [if exists] [库名]
使用数据库
1
2
3--如果表名是特殊字符,就需要带``
use [库名]
use `school`查看数据库
1
show databases -- 查看所有的数据库
2、数据类型
数值
int 标准的整数 4个字节 常用的intdecimal 字符串形式的浮点数 金融计算的时候,一般是使用decimal(精度问题)
字符串
varchar 可变字符串 0~65535 常用的变量 Stringtext 文本串 2^16-1 保存大文本
时间日期
data YYYY-MM-DD,日期格式time HH:mm:ss 时间格式datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式timestam 时间戳, 1970.1.1 到现在的毫秒数 也较为常用的时间格式year 年份
null
没有值或者是未知
不能用null进行运算,结果一定为null
3、字段属性
- Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
- zerofill:
- 0填充的
- 不足的位数,使用0来填充,int(3), 5 — 005
- 自增:
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通彻用来设计唯一的主键 index,必须是整数类型
- 可以自定义设计主键的起始值和步长
- 非空(Null not null):
- 假设设置为not null,如果不给他赋值,就会报错
- NULL,如果不填写值,就会报错
- 默认值:
- 设置默认的值
- 每一个表都必须存在以下五个字段:
- id 主键
version
乐观锁- is_delete 伪删除
- gmt_create 创建时间
- gmt_update 修改时间
4、创建数据库
- 格式
1 | CREATE TABLE [IF NOT EXISTS] `表名`( |
- 常用命令
1 | SHOW CREATE DATABASE school; -- 查看创建数据库的语句 |
5、数据表的类型
- 设置数据库的字符集编码
1 | CHARSET=utf8 |
不设置的话,会是mysql默认的字符集编码,不支持中文
- 修改
1 | -- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名 |
3、MySQL数据管理
- 外键
方式一
1 | CREATE TABLE `grade` ( |
删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)
方式二
1 | CREATE TABLE `grade` ( |
以上的操作都是物理外键,数据库级别的外键,不建议使用!
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)
DML语言
数据库意义:数据存储,数据管理
- insert
- update
- delete
添加
insert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17-- 插入语句(添加)
-- insert into 表名([字段名1,字段2,字段3])values('值1'),('值2'),('值3', ....)
INSERT INTO grade(gradename) VALUES('大四')
-- 由于主键自增我们可以省略 (如果不写表的字段,他就会一一匹配)
INSERT INTO grade VALUES('大三')
-- 一般写插入语句,我们一定要数据和字段一一对应
-- 插入多个字段
INSERT INTO grade(gradename)
VALUES('大一'),('大二')
INSERT INTO student(`name`) VALUES ('张三')
INSERT INTO student(`name`,`password`,`sex`)
VALUES ('李四', 'aaaaaa','男'),('王五','bbbbb','男')语法:
-- insert into 表名([字段名1,字段2,字段3])values('值1'),('值2'),('值3', ....)
注意事项:
1、字段是可以省略的,但是后面的值必须要一一对应,不能少
2、可以同时插入多条数据,VALUES后面的值,需要使用,隔开即可
VALUES(),(),....
修改
update 修改谁 (条件) set 原来的值=新值
1
2
3
4
5
6
7
8
9
10-- 修改学员名字,带了条件
UPDATE student SET `name`='紫薯球' WHERE id=1;
-- 不指定条件的情况下,会改动所有表
UPDATE student SET `name`='紫薯球';
-- 修改多个属性,逗号隔开
UPDATE student SET `name`='ZISHUQ',email='20140103@qq.com' WHERE id=1;
-- 语法:
-- UPADTE 表名 SET COLUMN_NAME = VALUE,[COLUMN_NAME = VALUE, ....] WHERE [条件]条件:where子句 运算符 id 等于某个值,大于某个值,在某个区间内修改….
操作符会返回布尔值
操作符 含义 范围 结果 = 等于 5=6 false <> 或 != 不等于 5<>6 true > < >= <= BETWEEN… AND … 在某个范围内 [2,5] AND && OR IS 是…. IS NULL 是空 NOT ~ 注意:
- colnum_name 是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列
- value,是一个具体的值,也可以是一个变量
删除
delete 命令
语法:
delete from 表名 [where 条件]
1
2
3
4
5-- 删除数据(避免这样写,会全部删掉)
DELETE FROM student;
-- 删除指定数据
DELETE FROM student WHERE id=1;truncate 命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
1
2-- 清空 student 表
TRUNCATE student;delete 和 truncate 区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:
- TRUNCATE 重新设置 自增列 计数器会归零
- TRUNCATE 不会影响事务
1
2
3
4
5
6
7
8
9
10
11
12-- 测试delete 和 truncate 区别
CREATE TABLE TEST(
ID INT(4) NOT NULL AUTO_INCREMENT,
COLL VARCHAR(20) NOT NULL,
PRIMARY KEY(ID)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO TEST(COLL) VALUES('1'),('2'),('3')
DELETE FROM TEST -- 不会影响自增
TRUNCATE TABLE TEST -- 自增会归零