一、使用客户端连接数据库
mysql.exe -h127.0.0.1 -P3306 -uroot -p
-h host 要连接的服务器,自己电脑 localhost/127.0.0.1
-P port 端口,MySQL占用3306端口
-u user 用户名,MySQL提供了管理员用户root
-p password 密码,xampp下root的密码默认为空
简写:mysql -uroot
二、 常用的管理命令
quit; 退出服务器的连接
show databases; 显示所有的数据库
use 数据库名称; 进入到指定的数据库
show tables; 显示当前数据库中所有的数据表
desc 数据表名称; 描述指定的数据表结构
三、常用的SQL命令
1.丢弃数据库,如果存在
drop database if exists 数据库名称;
2.创建新的数据库
create database 数据库名称;
3.进入数据库
use 数据库名称;
4.创建数据表
create table 数据表名称(
列名称 列类型,
....
);
5.插入数据
insert into 数据表名称 values(一组值,...);
6.查询数据
select * from 数据表名称;
7.修改数据
update 数据表名称 set 列名称=值, ... where 条件;
8.删除数据
delete from 数据表名称 where 条件;
四、解决中文乱码
设置客户端连接服务器端的编码UTF-8
set names utf8
设置服务器端创建数据库,存储字符的编码为UTF-8
create database 数据库名称 charset=utf8;
五、列类型
1.数值型
tinyint 微整型,占1个字节,范围-128~127
smallint 小整型,占2个字节,范围-32768~32767
int 整型,占4个字节,范围-2147483648~2147483647
bigint 大整型,占8个字节,范围很大
decimal(M, D) 定点小数,小数点不会发生变化,M表示总的有效位数,D表示小数点后的位数
boolean 布尔型,只有两个值,分别是true/false,用于存储只有两个值的数据,例如:性别、是否已婚、是否为会员...
MySQL中没有真正的布尔型,boolean最终转换为tinyint,true转为1,false转为0
2.日期时间型
date 日期型 '2023-05-04'
time 时间型 '14:38:50'
datetime 日期时间型 '2023-05-04 14:38:50'
3.字符串型
varchar(M) 变长字符串,不会产生空间浪费,数据操作速度相对慢,常用于存储变化长度的数据,例如:标题、姓名、文章详情... M的最大值是65535
char(M) 定长字符串,可能会出现空间浪费,数据操作速度相对快,常用于存储固定长度的数据,例如:手机号码、身份证号码... M的最大值是255
text(M) 大型变长字符串,M最大值是2GB
| varchar(5) | char(5) | |
|---|---|---|
| a | a\0 | a\0\0\0\0 |
| ab | ab\0 | ab\0\0\0 |
| 一二三 | 一二三\0 | 一二三\0\0 |
如果要存储文件的话,都是存储文件的路径
使用合理的列类型
create table t1 (
id int,
name varchar(8),
sex boolean,
phone char(11),
salary decimal(7,2), -- 99999.99
birthday date
);
六、列约束
create table t1(
id int 列约束
);
1.主键约束
primary key : 声明了主键约束的列,不允许插入重复的值;一个表中只能使用一次主键约束,通常加在编号列,会加快数据的查询速度
null 空,表示一个暂时无法确定的值,例如:暂时无法确定商品的名称、价格;无法确定一个员工的手机号码、家庭住址...
主键约束的列禁止插入null
2.非空约束
not null:声明了非空约束的列,禁止插入null
练习:给商品表product的价格和上市时间添加非空约束,并插入值测试。
3.唯一约束
unique:声明了唯一约束的列,禁止插入重复的值,允许插入null,甚至多个null
主键约束 = 唯一约束 + 非空约束
4.默认值约束
default
在插入一条数据的时候,在不给值的情况下,会使用默认值
(1) 设置默认值
通过default关键字设置
create table news(
origin varchar(8) default '达内'
);
(2) 应用默认值
①插入值的位置直接使用default即可
insert into news values(1,... default);
②给指定的列提供值,没有出现的列会自动应用默认值
insert into news(列名称1,类名称2,..) values(值1,值2,..);
5.检查约束
check,也称为自定义约束,用户可以指定约束条件
create table student(
score tinyint check(score>=0 && score<=100)
);
MySQL不支持检查约束,认为会严重影响数据的插入速度,后期是通过JS来进行验证。
6.外键约束
声明了外键约束的列,插入的值必须在另一个表的主键列中出现过,目的是为了让两个表建立关联。
外键要和对应的主键,列类型保持一致。
foreign key(外键列) references 另一个表(主键列)
二、自增列
auto_increment:自动增长,声明了自增列,插入数据的时候只需要赋值为null,就会自动获取最大值,然后加1插入。
自增列必须添加在主键列
2万+





