这篇博文给大家总结MySQL的一些基本知识点,和一些容易出错的注意点
我们在开发时,都是需要账号登录操作数据库的,脚本代码如下,也可以手动创建:
CREATE USER 'user'@'%' IDENTIFIED BY 'passwd';
我们在实际开发过程中,每个角色所对应的权限是不一样的,比如项目经理或者DBA具有所有数据库的权限而开发人员有可能只有查询表的权限,如图:
#给用户zhangsan在job数据库中的所有表只有查询权限
GRANT SELECT
ON job.*
TO 'zhangsan'@'localhost'
IDENTIFIED BY 'zhangsan123'
这时候用用户zhangsan
登录 ,操作job数据库下的表时,如果进行了查询外的操作就会报错提示:
今天在整理时,报了一个错误,具体的错误截图因为已经解决了,再试一次也不报错了,给大家大致讲一下:
在创建完用户后,已经设置了密码为"123"不为空,但用这个用户登录时,输入123一直报错,而为空就可以连接数据库,具体的原因是因为默认数据库mysql的user表的问题,在安装数据库时没有设置密码,创建一个新用户登录时,默认匹配了空的用户账号密码,导致所有新建账号只能用空密码登录
解决代码:
#解决设置用户名和密码为空
use mysql;
delete from user where user='';
flush privileges;
因为一系列的操作比较多加上篇幅原因,就不贴效果图了,直接上代码,有需要的小伙伴也可以方便使用:
#1.库的创建
CREATE DATABASE IF NOT EXISTS 库名;
CREATE DATABASE xy#新库名;
#2.库的修改
#更改库的字符集
ALTER DATABASE 修改的库名CHARACTER SET gbk;
#更改库名
RENAME DATABASE 旧库名 TO 新库名
#3.库的删除
DROP DATABASE IF EXISTS books;
#1.表的创建1
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20)#书名
)
#表的创建2
CREATE TABLE IF NOT EXISTS atuhor(
id INT,
au_name VARCHAR(20)
)
#表的修改
#修改book表bName列字段为bname
ALTER TABLE book CHANGE bName bname VARCHAR(20);
#修改列的类型或约束
ALTER TABLE book MODIFY COLUMN bname INT;
#添加新列
ALTER TABLE book ADD COLUMN bprice INT;
#删除列
ALTER TABLE book DROP COLUMN bprice;
#修改表名
ALTER TABLE book RENAME TO book_xy;
#表的删除
DROP TABLE IF EXISTS book_xy;
#查询指定库下的所有表
SHOW TABLES;
#通用写法
DROP TABLE IF EXISTS book#旧表名;
#表的复制
#复制表结构
CREATE TABLE copy LIKE atuhor;
select * from copy;
#复制表结构和数据
CREATE TABLE copy2
SELECT * FROM atuhor;
select * from copy2;
#只复制部分数据
CREATE TABLE copy3
SELECT id,au_name
FROM atuhor
WHERE id=1;
SELECT * FROM copy3;
#只复制某些字段
CREATE table copy4
SELECT id
FROM atuhor
SELECT * FROM copy4;
#六大约束
#NOT NULL:非空
#DEFAULT:默认
#PRIMARY KEY :主键
#UNIQUE :唯一
#CHECK :检查约束(mysql不支持)
#FOREIGN KEY :外键
方法一:
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuname VARCHAR(20) NOT NULL,#非空约束
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查约束
seat INT UNIQUE,#唯一约束
age INT DEFAULT 18,#默认约束
majorid INT REFERENCES major(id)#外键
)
方法二:
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT ck CHECK(gender='男' OR gender='女'),
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
)
方法三:
#添加非空约束
ALTER TABLE 表名 MODIFY COLUMN 列字段 VARCHAR(20) NOT NULL;
#添加默认约束
ALTER TABLE 表名 MODIFY COLUMN 列字段 INT DEFAULT 18;
#列级约束 添加主键
ALTER TABLE 表名 MODIFY COLUMN 列字段 INT PRIMARY KEY;
#添加唯一约束
ALTER TABLE 表名 MODIFY COLUMN 列字段 INT UNIQUE;
#添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列字段) REFERENCES 外键表(外键表列字段);
#删除默认约束
ALTER TABLE 表名 MODIFY COLUMN 列字段 INT;
#删除非空约束
ALTER TABLE 表名 MODIFY COLUMN 列字段 VARCHAR(20) NULL;
#删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
#删除唯一
ALTER TABLE 表名 DROP INDEX 列字段 ;
#删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键列字段 ;
#标识列
CREATE TABLE tab_identity(
id INT,
Tname FLOAT UNIQUE AUTO_INCREMENT,#标识列
seat VARCHAR(20)
)
在插入数据时,标识列自动增长不用增加:
INSERT INTO tab_identity(id,seat) VALUES(1,'1');
设置步长( 设置步长)
SET auto_increment_increment=3;设置步长
好了,今天的博文就到这了,MySQL数据库的其他知识汇总会在后续继续更新分享…