-- 第一个mysql自带有个问题
-- mysql默认的编码集是latin1,修改成utf8mb
use shujia;
-- 建表语句
-- create table 表名(
-- 字段名字 字段类型,
-- 字段2,
-- ....
-- 字段n
-- )
-- 字段定义属性时,必须给上长度,int比较特殊 不需要给默认长度为11
-- create table students(
-- id int(11),
-- name VARCHAR(255),
-- age int
-- );
-- drop table if exists students;
-- create table 表名(
-- 字段名字 字段类型 字段属性,
-- 字段2,
-- ....
-- 字段n
-- )
-- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
-- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
-- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔
-- 自增只能加给数值
-- drop table student;
-- create table student(
-- id int(11) AUTO_INCREMENT,
-- name varchar(255) AUTO_INCREMENT,
-- PRIMARY KEY(id)
-- )ENGINE=INNODB default charset=utf8;
-- sex
-- enum类型 所修饰的字段 有固定的值
-- 字段名字 enum('值1','值2')
-- enum类型 所修饰的字段 有固定的值通常 这些值用数字表示
-- drop table student;
-- create table student(
-- id int AUTO_INCREMENT,
-- name VARCHAR(255) not null,
-- age INT,
-- sex enum('0','1','2'), -- sex 男 女 未知
-- PRIMARY KEY(id)
-- );
-- drop table student;
-- create table student(
-- id int,
-- name varchar(255),
-- age int not null DEFAULT 18
-- );
-- 1500100001,施笑槐,22,女,文科六班
create table students(
id int(11) not null AUTO_INCREMENT,
name VARCHAR(255) not null,
age int DEFAULT 18,
sex enum('0','1','2') default '2',
clazz enum('文1','文2','理1','理2'),
PRIMARY KEY(id)
);
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
然后关闭连接重新打开关系型:以行作为记录,列数相同
非关系型:以列作为记录,行数随便服务器->数据库->表(行列组成的二维表格)->行
client操作服务器通过命令登录操作:mysql -u用户名(默认root) -p密码SQL语句:每个命令执行结束加分号结束
查询所有数据库:show databases;
切换数据库:use 库命名;
创建数据库:create database [IF NOT EXISTS] 库名;
删除数据库:drop database [IF EXISTS] 库名;
查询数据库创建:show 建库语句;
指定数据库采用的字符集:CHARACTER SET
注意:不要修改mysql服务器的编码集,表的编码集默认和库一致#### 修改MySQL编码
* 编辑配置文件:```vim /etc/my.cnf``
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci* 重启MySQL
systemctl restart mysqld
* 登录并查看MySQL编码
# 123456需替换为自己的密码
mysql -uroot -p123456
# 需在MySQL的shell中执行
show variables like "%char%";
建表
格式:
create table [if exists] 表名(
字段1 数据类型 字段属性,
字段2 数据类型 字段属性,
...
字段N 数据类型 字段属性
)engine=引擎 default charset=编码集;
查看当前数据库:select database();
查看建表语句:show create table 表名;
查看表结构:desc 表名;
删除:drop table [if exists] 表名;字段属性:
not null:没给值数据为默认值(varchar默认值为空)
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1
PRIMARY KEY关键字用于定义列为主键,您可以使用多列来定义主键,列间以逗号分隔
ENGINE 设置存储引擎,CHARSET 设置编码
default null:没给值数据就是null
default 值:设置字段的默认值
注意:主键不重复的列修改表结构:alter table
alter 类型(库、表字段)
alter table 表名 character set gbk;--编码改为gbk
1、修改表名:alter table 旧表名 rename to 新表名;
eg、alter table student rename to students;--把表student改名为students
2、添加字段:alter table 表名 add 字段 字段数据类型 属性;
eg、alter table students add baidu varchar(255);--添加baidu字段
3、删除字段:alter table 表名 drop 字段名;
alter table students drop baidu;--删除baidu字段
3、(1)修改字段:alter table 表名 change 旧字段 新字段 数据类型 属性;
eg、alter table students change age ages int;--把表students中age改名为ages
(2)修改字段:alter table 表名 modify 字段 数据类型 属性;(在原字段修改,不能修改字段名称)
eg、alter table students modify age int;--把表students中age类型改为int;
注意:
change:修改所有(字段名,数据类型,属性)
modify:修改一部分(数据类型,属性)
修改数据类型时,varchar->int元数据会变为0增删改查:字符串全部使用''包起来
(字段用反引号,值用单引号在数据库中只需在是字符串类型的加引号即可)
注意:
最好在值一栏无论什么类型都用单引号括起来。--(为了方便与其他语言的使用)
添加时字段和值的数量和位置都要一一对应
并且一定要有值、字段可以不按照顺序给
增:
格式:
insert into 表名(字段1,字段2...字段n) values('值'),('值')...('值');
例如:
insert into stduent(name) values('zs');
insert into stduent(name) values('zs'),('ls');
insert into `students` (`id`,`name`,`age`,`sex`) values('1005','t','18','0');
删
格式:
delete from 表名 where 子句;
eg/. delete from students where id='1007';
delete from students where sex='0';
delete from students where name like 't%';--模糊查询删除名字以t开头的所有字段
改
格式:
update 表名 set 字段1=值1,字段2=值2...字段N=值N where 子句;
update students set name='z',age=19,sex='1' where id=1002;--在id=1002行中name改为z,age=19,sex=1查
格式:
select 字段 from 表名 where 子句;
select age as '年龄',name as '姓名' from students;(as 可以不写)
注意:
*表示所有字段
select * from students;
先走from获取所有数据,然后select进行显示
select name,age from students;as起别名
格式:
字段 as 名称
注意:
as 也加可不加
where子句:
> < <= >= = <> 大于、小于、大于(小于)等于、不等于
between ...and... 显示在某一区间的值(含头含尾)
eg.1 select * from students where age between 18 and 23;
in(set) 显示在in列表中的值,例:in(100,200)只能匹配100或200
eg.2 select * from students where age in(18,22);--查询表students中年龄18和22的
like '张_' 模糊查询 使用% 和 _(%表示匹配所有 _匹配一个)
eg.3 select * from students where name like 'zs';--表中查询名字zs
select * from students where name like 'z%';--表中查询所有名字以z开头的
select * from students where name like 'z_';--表中查询一个的所有
(如果表中含有zs,zss ,zx)z%--都显示,z_--只显示zs,zx,z__--只显示zss
Is null 判断是否为空
eg.4 select * from students where name is null;and 多个条件同时成立
or 多个条件任一成立
not 不成立,例:where not(expection>10000);
select * from students where age >=18 or age<=22;
select * from students where age >=18 and age<=22;
select * from students where not (age>18);
select * from students where name is not null;
limit分页
格式:
语句 limit 开始下标,长度;
注意:
如果数据量不够,显示全部
例如:从下标为0开始显示10条
select * from stduents limit 0,10;去重
格式:
DISTINCT 字段1,字段2...字段N
select distinct age,name from student;
注意:
字段不能在DISTINCT之前,只能在DISTINCT后面
DISTINCT之后有多个字段,按照所有字段进行去重
拼接
格式 CONCAT(str1,str2,...)
CONCAT_WS(sparactor,str1,str2,...)
select *,concat(s,'--',city) from test;--表中s和city用--拼接
select * ,concat_ws('-',s,city) from test;
聚合函数:
count(字段):求多少行数据
select count(age) from student;--求age的个数,为null不计
select count(*) from student;--求数据有多少行
sum(字段):求和
avg(字段):平均数
select avg(age) from student;
max(字段):最大值
SELECT max(name) from student;
min(字段):最小值
select min(age) from student;
注意:
varchar能比较大小(字母排序),不能获取avg(没有任何意义)
如果值为Null不参与计算
sum和avg字段的数据不是数值,结果都是0
针对浮点类型的计算
ROUND(X,D) D表示保留几位小数 只会对所保留的数据最后一位进行四舍五入
ROUND(X) 一个参数 只会对小数点后一位数进行四舍五入
FLOOR(X) 10.2 --10 (向下取整)
CEIL(X) 10.2 --11(向上取整)
RAND() 随机产生0-1的小数