前言:
mysql数据库是每一个测试小白入行必学的一个知识,学会这些命令呢也能让你在玩转数据库的时候给你提供很多的便利也是很不错的,最后希望各位小伙伴学有所成,心想事成咯,
废话不多说直接上正文。
【文章末尾给大家留下了大量的粉丝福利哈】
数据库常用命令
启动/暂停
net start mysql; 启动 net stop mysql; 暂停
使用root账户登录
mysql -uroot -p123456 root是默认用户,超级管理员 -p后面接密码
显示所有数据库
show databases;
使用某个数据库
use 数据库名
修改密码
1.使用mysql数据库 use mysql 2.修改密码(将root用户密码修改为123456) update mysql.user set authentication_string=password('123456') where user='root'; 3.刷新 flush privileges;
创建用户
create user 'username'@'host' identified by 'password';
给用户授权
grant privileges on databasename.tablename to 'username'@'host';
-
privileges:用户操作权限,如select,insert,update等,如果要授予所有权限使用
all
-
databasename:数据库名
-
tablename:表名,如果要授予用户对所有数据库和表相应操作权限可以使用
*
表示,如*.*
如:我要username用户,对所有数据库和表有查和修改功能
grant select,update on *.* to 'username'@'host';
注意:以上授权用户不能给其他用户授权,如果想要给其他用户授权,用以下命令:
grant privileges on databasename.tablename to 'username'@'host' with grant option;
创建一个数据库
-
方式1:
create database 数据库名;
-
方式2:
create database if not exists 数据库名 default 默认编码集(utf8)
删除一个数据库
-
方式1:
drop database 数据库名
-
方式2:
drop database if exists 数据库名
什么是SQL
SQL由四部分组成
DDL:创建和删除结构
DML:对表和视图进行插入,删除,更新操作
DQL:对表和试图进行查询操作
TCL:使用事务管理DML操作
mysql的数据类型
理论实战
-
经常变化的字段用varchar
-
知道固定长度用char
-
超过255字节只能用varchar和text
-
能用varchar的地方不用text
-
能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销.
这是因为引擎在处理查询和连接会逐个比较字符串中的每一个值,而对于数字类型只需比较一次就够了.
-
同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表
DDL操作
创建表
create table 表名( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, .... 列名称n 数据类型n )defualt charset=字符集编码(utf8),engine=指定表的存储引擎(innodb)--可选
查看表结构
-
方式1
desc 表名称;
-
方式2
show create table 表名称; -- 可以看的建表语句
修改表结构
基本语法:arlter table 表名
-
向表中添加一列
alter table 表名 add column 列名称 数据类型; 如:向student表新增加一列stu_height学生身高 alter table student add column stu_height int(11);
-
删除某一列
alter table 表名 drop column 列名称 例如:删除student表中的学生身高 alter table student drop column stu_height;
-
修改列名称和数据类型
alter table student change column 原列名 新列名 新数据类型; 例如修改stu_sex 为 student_sex 数据类型修改为 varchar(30) alter table student change column stu_sex student_sex varchar(30);
-
修改某一列的数据类型
alter table student modify column 原来的列名 新的数据类型;
例如:将学生年龄修改为int类型
alter table student modify column stu_age int(11);
删除表
-
直接删除
drop table 表名称;
-
删除之前先判断表是否存在
drop table if exists 表名称;
显示当前库的所有表
show tables;
DML操作
添加数据
-
单个添加
插入所有数据时
insert into 表名称 values (值1,值2,……); insert into student values(101,'老王',0,'足球',31);
注意:在插入所有的数据时values后面的括号必须填满所有列,不然会报错,如果你不想插入全部的列,就可以在表名称后面指定列名称.如:
insert into 表名称 (列名1,列名2) values(列名1值,列名2值)
-
批量添加
行与行之间使用半角逗号分离,value关键字只定义一次
insert into student(id,stu_name,stu_sex,stu_hobby,stu_age) values (108,'老王',1,'Basketball',39),(1031,'老张',1,'Basketball',39);
修改数据
-
批量修改
update 表名称 set 列名称=值;
例如:student表的年龄全部修改为50
update student set stu_age=50; -
单个修改
如果只想修改某一行的数据,需要加上条件
例如:我只想修改id为1031的年龄为60 where 表示行过滤 update student set stu_age=60 where id=1031;
-
单个修改多个值
例如:修改id为1031的年龄为60,姓名为大大 update student set stu_age=60,stu_name='大大' where id=1031;
删除数据
-
删除一个
删除一条数据 delete from 表名 where 条件; 例如:删除id为108的student数据 delete from student where id=108;
-
删除全部
delete from 表名; 例如:删除student表所有数据 -- 开发时最好不要用这个,可以定义一个字段用来表示是否删除,0表示存在1表示要删除,然后查询时使用where条件判断字段进行查询出来. delete from studnet;
-
truncate关键字
truncate是DDL,删除所有数据,不支持where ,不能回滚
delete是DML,可以删除部分数据,因为支持where,可以回滚
总体上truncate的效率比delete高,它们都只能删除数据不能删除表结构,只要drop才能删除表结构.
-
数据完整性
因为上面的表缺乏安全性,会有重复的id等数据这些都是脏数据.
我们要给表定义规则,确保表中的数据有效性,一致性,安全性,尽最大可能减少脏数据,重复的的数据
主键约束
主键:主要的关键字,一个表如果创建了主键那么该行的所有数据必须在表中唯一.设置了主键约束那么这个字段不能为空,不能重复
如:身份证必须是唯一的且不能为空,那么就把身份证设置为主键
总结:非空且唯一
-
设计原则:一般主键为数值类型,呈递增趋势.如果不想每次插入主键可以不手动添加可以设置为自动增长,自动增长从1开始,如果手动添加后设置了一个新值,那么下次自动设置时主键会从你手动设置的值往后递增.
语法:
create table tb_class( id int(11) auto_increment, -- id是主键列,不用显示插入值会自动增长 class_name varchar(30), class_desc varchar(100), primary key(id) -- 为tb_class表的id设置主键约束 ) 注意: MySQL 数据库 auto_increment自动增长和主键primary key 是配套的不能单独使用
非空约束
某字段的值不允许为空,如果其字段没有设置值将报错
create table tb_class( id int(11) auto_increment, -- id是主键列,不用显示插入值会自动增长 class_name varchar(30) not null,-- not null非空约束 class_desc varchar(100), primary key(id) -- 为tb_class表的id设置主键约束 )
唯一约束
制定一个规则让某一列的数据必须唯一
特征:某列数据可以为空,但必须唯一,可以有多个null值,一般设置了唯一约束那么最高设置非空约束,这样能提升索引效率.
例如:学生的手机号码 create table tb_1( phone int unique -- unique )
默认约束
为某一列制定一个默认规则
如:性别默认为0 create table tb_1( phone int unique, sex int DEFAULT 0 -- default 0 )
外键约束
外部的关键字叫外键,通常为多张表建立联系,确保表与表之间的安全性,一致性,能够减少数据冗余
前面个几个约束建立在一张表中
外键约束:多张表建立的约束,如果一张表的某个字段建立了外键约束,这个字段的取值就必须是你所依赖的主表中主键的值.如果取其他值会报错,当然如果主表的主键被其他从表所引用了这则个字段就不能删除了
场景:创建一个tb_student表,为其添加默认约束、唯一约束、非空约束、外键约束
create table tb_student(
id int(11) auto_increment, -- id自动增长
stu_name varchar(50) not null, -- name不能为空
stu_mobile varchar(20) unique, -- mobile唯一不能重复
stu_sex bit default 1, -- 设置sex默认为1
class_id int(11) not null, -- 设置class_id不能为空
primary key(id), -- 设置id为主键
foreign key(class_id) references tb_class(id) -- 学生表的class_id建立外键去关联tb_class表的主键id,建立外键时一定要保证外键依赖的主表要先创建
)engine=innodb,default charset utf8;
约束总结
约束分为两类:
-
行级别约束: 主键约束,外键约束
-
列级别约束: 非空约束,唯一约束,默认约束
外键约束小结:
-
foreign key(外键列) references 主表(