SQL数据库操作命令大全
官网地址:https://dev.mysql.com/downloads/mysql/
ls /var/lib/mysql 这里是数据库的目录
过滤初始密码:
grep password /var/log/mysqld.log
修改密码:
alter user root@”localhost” identified by "123qqq…A";
修改密码策略
Show variables like “%password%” 模糊查看包含password 的行
set global validate_password_policy=0; //只验证长度
set global validate_password_length=6; //修改密码长度,默认值是8个字符
alter user root@”localhost” identified by "tarena"; //修改登陆密码
这些在命令行里修改的是临时更改
vim /etc/my.cnf //永久配置
[mysqld] 下面
validate_password_policy=0 变量名+名称
validate_password_length=6 密码长度
一:基础
先下载安装数据库:
yum -y install mariadb mariadb-server
mysql 进入数据库
1.创建数据库:
CREATE DATABASE database-name;
2.删除数据库
drop database dbname;
3.查看数据库
show databases;
4.终止命令,不执行
Show databases \c
5.获取当前所在的库:
Select database();
6.显示连接用户名:
show user();
7.切换库:
show user();
8.建表命令:
Create table 库名.表名(
字段名1 类型(宽度),
字段名2 类型(宽度),
....
)DEFAULT CHARSET=utf8; //指定中文字符集,可以给字段赋予中文
create table db1.stuinfo(name char(15), homeaddr char(20));
在db1这个库里创建一个叫stuinfo 的表,表里面有name和homeaddr 2个字段
9.查看表里面的结构和类型:
desc stuinfo;
10.查看表内所有内容:
select * from db1.stuinfo;
11.往stuinfo表里面的2个字段添加内容,添加了2行
insert into db1.stuinfo values("bob","usa"),("lilei","china");
12.批量修改表记录,把stuinfo表里的 homeaddr字段的内容都修改成beijing
update db1.stuinfo set homeaddr="beijing";
13.删除stuinfo表里的所有表记录
delete from db1.stuinfo;
14.删除db1库里的stuinfo表
drop table db1.stuinfo;
15.查看默认的字符集
show create table mysql.user;
16.创建中文表,向其中添加内容:
create table 学生表2(姓名 char(10), 年龄 int)DEFAULT CHARSET=utf8;
insert into 学生表2 values("张三丰",150),("张翠山",99);
进阶用法
“ ” :不是空,代表为0个字符
表结构:
约束条件: 作用是限制如何给字段赋值
null : 是yes 代表可以给表格赋空值(默认设置)
not null 不允许为null(空)
key 键值类型
default 设置默认值,缺省为null
extra 额外设置
1.只对name字段赋值,其余字段默认值
insert into t1(name) values("jj");
2. 判断name是否为null空
mysql> select name from db2.dc where name is null;
3.把ygb的yg_id=2的编号改成yg_id=8
update ygb set yg_id=8 where yg_id=2;
4.把ygb中的yg_id=8的编号信息删除
delete from ygb where yg_id=8;
修改表结构
命令 : alter table 库名.表名 执行动作;
Add 添加新字段 :
add 字段名 类型 约束条件; 字段默认在末尾
add 字段名 类型 约束条件 after 字段名; 指定在什么字段后面
add 字段名 类型 约束条件 first; 添加到所有前面
1.添加一个新字段叫 email
alter table db2.t1 add email varchar(50);
2.在age后面添加一个字段为likes 并设置default默认值
alter table t1 add likes set("eat","drink","game","happy") not null default "eat,drink" after age;
3.在所有字段前面添加一个字段为 class 设置默认值为”nsd1905”
alter table db2.t1 add class char(7) default "nsd1905" first;
Modify 修改字段类型 :
修改的字段不能与已存储的数据冲突
格式 : alter table 库命.表名 modify 字段名 类型(宽度) 约束条件 [after 字段名 | first ];
1. 把字段age 修改到class字段后面,字段内容不变,就把原内容抄一遍
alter table db2.t1 modify age tinyint unsigned default 19 after class;
2.把modify 字段内容修改成 varchar(15) 其余不变照抄
alter table db2.t1 modify name varchar(15) not null default "";
Change 修改字段名 :
alter table 库名.表名 change 源字段名 新字段名 类型(宽度) 约束条件;
1.把字段email 改成叫mail 字段内容不变照抄
alter table db2.t1 change email mail varchar(50);
drop 删除字段 :
alter table 库名.表名 drop 字段名;
1. 把修改后的mail字段删除掉
alter table db2.t1 drop mail;
rename 修改表名 :
alter table 库名.表名 rename 库名.新表名;
1. 把db2库里的t1表 改名为 dc
alter table db2.t1 rename db2.dc;
mysql简直概述:
Mysql 键值
普通索引 index
唯一索引 unique
主键 primary key
外键 foreign key
全文索引 fulltext
-索引类似余书的目录
-对表中的字段值进行排序
-索引类型包括 : Btree B+tree hash
优点 : 可以加快数据的查询速度
缺点 :需要占用物理空间,降低了数据的维护速度
index 普通索引:
-一个表中可以有多个index 字段
index 字段 标志是MUL
1. 建表时创建索引
create table db2.t2(
-> name char(10),
-> age int,
-> class char(7),
-> email char(30),
-> index(name),index(age)
-> );
创建t2 表时添加index索引,用name 和 age 2个表字段 做索引目标
2.已有表里添加索引 :
create index 索引名 on 表名(字段名);
create index xxx on db2.dc(name); 把dc表里的name字段加到索引里名为xxx
2.1drop index 索引名 on 表名; 删除索引
drop index age on db2.t2; 删除db2库中t2表里叫 age 的索引
2.3show index from 表名 \G; 详细查看索引字段
show index from db2.t2\G; 查看索引字段
primary key主键
-字段值不允许重复,且不允许赋NULL空值
-一个表中只能有一个primary key字段
-主键字段的标志是PRI
建表时创建主键:
- primary key(字段名)
1.创建t3表时,设置name字段为主键
create table db2.t3(name char(10) primary key, age int);
2.创建t4表时,写好字段参数后,在指定name为主键,和上面操作一样.
create table db2.t4(name char(10), age int, primary key(name));
3.已有表里创建主键 :
格式 :alter table 库.表 add primary key(字段名)
3.1 在已有的dc表里把name字段设置成主键
alter table db2.dc add primary key(name);
4.删除主键
alter table 表名 drop primary key;
复合主键 :
表中多列一起做主键
插入记录时多列的值不允许同时重复
格式 : alter table 表名 add primary key(字段名列表);
1.建表时创建复合主键:
create table db2.t5(class char(7),
->name char(10),
->money enum("no","yes"),
->primary key(class, name)
->);
创建t5表时,指定class 和name 2个表字段为主键,即是复合主键
2.在已有表里添加主键 :
alter table 表名 add primary key(字段名列表);
3.在t5表里添加一个字段
alter table db2.t5 add stu_num char(9) first;
4.把t5表里的stu_num class name 3个字段设置成主键
alter table t5 add primary key(stu_num, class, name);
与auto_increment 连用
auto_increment :自增长
1.创建t6表,创建时设置stu_num字段为主键并且是auto_increment 自增长.
create table db2.t6(stu_num int primary key auto_increment, name char(10), age int);
2.给这个表添加内容但不给stu_num赋值,因为stu_num是设置的自增长,所已不赋值也会自动+1
insert into db2.t6 (name,age) values("bob",19);
3.向t6表中添加内容
insert into db2.t6(null,"dc",22);
foreign key 外键
作用: 向表中插入记录时,字段值在另外一个表字段值范围内选择.
使用规则:
- 表存储引擎必须是innodb
-字段类型要一致
-被参照字段必须要是索引类型的一种(primary key),不能重复,不能为空值
Create table 库.表( 格式:
字段列表,
Foreign key(字段名) references 库.表(字段名) 指定外键
On update cascade 同步更新
On delete cascade 同步删除
)engine=innodb; 指定存储引擎
1.创建ygb 表,为yg_id设置成主键和自增长,并向其2个字段添加内容,指定存储引擎.
create table db2.ygb(yg_id int primary key auto_increment, name char(20), sex enum("boy","girl"))engine=innodb;
insert into db2.ygb(name,sex) values("bob","boy");
insert into db2.ygb(name,sex) values("lisi","girl");
2.创建一个表叫gzb ,表字段要和ygb表里的表字段一样,后设置参考ygb表的gz_id 做本地表gz_id 的外键,并报持同步更新和同步删除,在指定存储引擎
create table gzb(gz_id int, pay float(7,2), foreign key(gz_id) references ygb(yg_id) on update cascade on delete cascade)engine=innodb;
2.1把ygb的yg_id=2的编号改成yg_id=8
update ygb set yg_id=8 where yg_id=2;
因为之前有设置过同步更新,所以更改ygb表中的yg_id 会同步到gzb表中的yg_id中
2.2把ygb中的yg_id=8的编号信息删除
delete from ygb where yg_id=8;
2.3去里面查询外键名称
Show create table 表名;
alter table 表名 drop foreign key 外键名;