一.昨日内容回顾
1、mysql的安装
1).解压文件 添加环境变量bin
2).初始化mysql生成数据data文件夹:
mysqld --initialize-insecure
3).mysqld 启动服务
4).mysql -u root -p 客户端连接
//将mysql服务制作成windows服务
1)mysqld --install
2) mysqld --remove
net start mysql # 启动服务
net stop mysql # 停止服务
2、 mysql的基本管理
1) 查看当前用户
select user();
2) 设置密码(现在已不用这种方式)
mysqladmin -u root -p'123' password "456"
3) 忘记密码的登录方式
(1) 以管理员身份运行终端,停止net stop mysql服务
(2) 执行跳过授权命令 启动mysql服务
mysqld --skip-grant-tables
(3) 更改密码
update mysql.user set authentication_string = password('') where User='root';
(4) 刷新权限,执行命令
flush privileges;
(5) 退出mysql exit
(6) 服务端kill mysql进程
tasklist|findstr mysql
taskkill /F /PID 进程号
(7) 启动服务进行mysql新密码登录即可。
4) 统一字符编码 mysql> \s 查看编码信息
在C:\mysql-5.6.40-winx64文件下创建my.ini文件
#mysql5.5以上:修改方式为
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
my.ini
二.今天内容总结
1、mysql库操作crud
1) 增
create database db1 charset utf8;
2) 查
show create database db1; # 查看数据库
show databases; # 查看当前库
select database(); # 查看所在的库。
3) 改
alter database db1 charset gbk
4) 删
drop database db1;
5) 数据库的命名规则:
可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位
# 基本上跟python或者js的命名规则一样
数据库的命名规则
6) 了解DDL、DML、DCL
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER 2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT 3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
DDL、DML、DCL
2、mysql表操作
1 ) 操作表
# 增
use db1
create table t1(id int,name char);
# 查
show create table t1; # 查看当前的这张t1表
show tables; # 查看所有的表
desc t1; # 查看表的详细信息
# 改
alter table t1 modify name char(6) # 改name的数据类型显示宽度,更改字段属性
alter table t1 change name Name char(7) # 改字段name为Name 后边也要加属性
alter table t1 add 新列名 int
alter table t1 drop 列名;
alter table t1 add i int after c;
alter table t1 add i int first; # 插入在第一列处
alter table t1 alter i set default 1000; # 设置默认值
alter table t1 alter i drop default; # 删除列默认值
alter table t1 rename to t2; # 修改表名
alter table t7 add primary key(id); # 修改主键
alter table t7 change id id int auto_increment; # 增加auto_increment 属性
alter table user add constraint fk foreign key(idept_d) references dept(id) on delete cascade on update cascade; # 增加外键、
alter table user drop foreign key fk;
# 删
drop table tb1 # 删除表tb1
# 复制表
方式一:create table b1 select * from db2.a1; # 复制结构和数据;
方式二:create table b1 select * from db2.a1 where 1>2; # 仅复制表结构;
方式三:create table b1 like db2.a1; # 仅复制表结构。
2) 操作表内容
# 增 插入内容
insert into tb1 values(1,'kack'),(2,'merry');
# 查
select id,name from tb1;
select * from db1.tb1;
# 改
update db1.t1 set name ='alex' where id =2;
# 删
delete from t1;
delete from t1 where id =2;
3、mysql数据类型
1) 数值类型
整型:tinyinit int bigint
小数:
float :在位数比较短的情况下不精准
double :在位数比较长的情况下不精准
0.000001230123123123
存成:0.000001230000 decimal:(如果用小数,则用推荐使用decimal)
精准
内部原理是以字符串形式去存
数值型
单精度:float(M,D) 255 30 四字节 32 1 8 23 7
双精度:double(M,D) 255 30 八字节 64 1 11 52 16
dec: DEC(M,D) 65,30
2) 日期类型
#2. 字符串:
char(10):简单粗暴,浪费空间,存取速度快
root存成root000000
varchar:精准,节省空间,存取速度慢 sql优化:创建表时,定长的类型往前放,变长的往后放
比如性别 比如地址或描述信息 >255个字符,超了就把文件路径存放到数据库中。
比如图片,视频等找一个文件服务器,数据库中只存路径或url。
语法:
YEAR
YYYY(1901/2155) DATE
YYYY-MM-DD(1000-01-01/9999-12-31) TIME
HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
日期
3) 字符类型
length() 查字节长度、char_length() 查字符长度
char 和varvhar的区别:
char:
字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
存储:定义多长个字符存多长字符,不足补空格,超出报错
查询:默认去掉尾部空格,除非设置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; 查询sql的默认模式:select @@sql_mode;
varchar:
字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
存储:有多少字符存多少字符,空格也算
查询:有多少查多少,空格也算。
4) 枚举和集合类型
enum 单选 只能在给定的范围内选一个值,如性别sex male/female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2.。。。。)
mysql> create table consumer(
-> id int,
-> name varchar(50),
-> sex enum('male','female','other'),
-> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
-> fav set('play','music','read','study') #在指定范围内,多选多
-> );
Query OK, 0 rows affected (0.03 sec) mysql> insert into consumer values
-> (1,'赵云','male','vip2','read,study'),
-> (2,'赵云2','other','vip4','play');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from consumer;
+------+---------+-------+-------+------------+
| id | name | sex | level | fav |
+------+---------+-------+-------+------------+
| 1 | 赵云 | male | vip2 | read,study |
| 2 | 赵云2 | other | vip4 | play |
+------+---------+-------+-------+------------+
rows in set (0.00 sec)
4、mysql完整性约束
用于保证数据的完整性和一致性。
PRIMARY KEY # 标识改字段为该表的主键,可以唯一的标识记录
FOREIGN KEY # 标识该字段为该表的外键
NOT NULL #标识该字段不能为空
UNIQUE KEY # 标识该字段值为唯一的
AUTO_INCREMENT # 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT # 为该字段设置默认值
UNSIGNED # 无符号
ZEROFILL # 使用0填充
1) not null与default
not null 不能为空,但是设置了default后可以不设置。
2) unique单列唯一和联合唯一
create table t1(
id int unique,
name char(10) unique);
create table t2(
id int ,
name char(10),
unique(id),
unique(name));
mysql> create table services(
-> id int,
-> ip char(15),
-> port int,
-> unique(id),
-> unique(ip,port)
-> );
3) primary key
单列主键、多列主键。相当于 not null 和unique
4) auto_increment
delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1;数据量大,删除速度比上一条快,且直接从零开始。
5) foreign key
create table user(
id int primary key,
name char(10) not null,
dpt_id int not null,
constraint fk_dep foreign key(dpt_id) references dep(id)
on delete cascade
on update cascade
); create table dep(
id int primary key,
name char(10) not null);
关联外键