时间:2021-07-01 10:21:17 帮助过:3人阅读
1、初始化
/bin/mysqld --initialize--insecure--
2、启动服务端
/bin/mysqld
添加环境变量后 直接敲
mysqld
即可启动
3、客户端链接
mysql -u root -h 192.168.1.12 -p
-h 可输入服务端IP进行链接。此lP默认值在安装时会让你设定,如使用-f强制安装则密码为空。
命令 | 解释 | 备注 |
---|---|---|
show databases; | 查看数据目录 | |
show variables; | 查看数据库的所有变量 | |
create database db1; | 创建一个数据库db1 | |
show variables like ‘%character%‘ | 查看跟编码有关的变量 | |
create database db1 CHARACTER SET utf8 | 创建支持‘utf-8的数据库 | |
alter database db1 CHARACTER SET utf8 | 将数据库修改为默认支持utf-8 | |
alter variables character_set_database CHARACTER SET utf8; | 将数据库修改为默认支持utf-8 | 修改变量的方式 |
use db1; | 使用数据库 | |
CREATE ‘user1‘@‘%‘ IDENTIFIED BY ‘password‘ | 创建用户并设定其允许登录的IP地址 | localshost为本机登录,%为所有ip均可登录 |
grant select,drop,delete,update,create,insert on db1.* to ‘user1‘@‘%‘; | 授权用户权限 | 其中_select,drop,delete,update,create,insert_为权限名称 |
revoke select on db1.* from user1; | 收回权限 | |
GRANT ALL PRIVILEGES ON db1. TO ‘username’@‘%’ IDENTIFIED BY ‘password’; | 赋予所有权限 | ALL PRIVILEGES意为所有权限 |
FLUSH PRIVILEGES; | 刷新权限 | 修改后立即启用 |
alter table student rename person; | 表改名 | student 改成 person |
类型 | 解释 | 备注 |
---|---|---|
tinyint | 微整型 | 范围有负数: -177 ~ 178 无负数: 0 ~ 255 |
int | 整型 | |
bigint | 大整型 | |
float | 浮点 | 不准确,会省略一定位数后的数值 |
double | 双精度小数 | |
decimal(10,5) | 十进制多精度小数 | 总长度,保留小数后几位,最大精度38 |
类型 | 解释 | 备注 |
---|---|---|
char(10) | 固定长度字符 | 固定长度,不足填充空数值,查找快 |
varchar(10) | 长度可变字符 | 可变长度,节省空间 |
text | 文本 | |
longtext | 长文本 | |
emum(‘a‘,‘b‘,‘c‘,‘d‘) | 枚举 | abcd任选其一 |
set(‘a‘,‘b‘,‘c‘,‘d‘) | 组合 | abcd选n个做组合 |
类型 | 解释 | 备注 |
---|---|---|
date | 日期 | |
time | 时间 | |
year | 年 | |
datetime | 日期及时间 | |
timestamp | 时间戳 | 日期时分秒。从1970年1月1日 00:00:00 开始的秒数总和 |
create table t1(
id int not null auto_increment primary key,
name char(10),
class_id int not null,
constraint xx_xx_id_pk foreign key(class_id) references class(cid)
)ENGINE=innodb DEFAULT CHARSET=utf8
auto_increment 为自增ID
primary key为主键
ENGINE使用innodb可以实现错误时回滚数据
旧版本默认为MyISAM、新版本(5.5以后)为InnoDB。
MyISAM有较高的插入,查询速度,但不支持事务,适用于评论,发信息等不太注重数据安全性的业务 。
InnoDB为事务型数据库的首选引擎,支持ACID事务,支持行级锁定,适用于转帐等需要保证数据安全的业务
INSERT INTO course(cname,teacher_id) VALUES(‘生物‘,1),(‘体育‘,1),(‘物理‘,2);
SELECT * FROM score;
DELETE FROM student WHERE sid BETWEEN 4 AND 6;
UPDATE course SET teacher_id=6 WHERE cid=1;
select * from t1 where name=yang limit 10,5; # 从第10个开始,选5个
-- 查询及修改AUTO_INCREMENT起始值
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name="student";
ALTER TABLE student AUTO_INCREMENT=1 ;
有四种方法, 参考资料: http://blog.csdn.net/haiross/article/details/50456112
desc table_name
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
select TABLE_NAME,CONSTRAINT_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
即两个字段值可重复出现,但只有同一种组合
primary key(uid, name)
constraint pk_id_name_uid_uname foreign key(uid,uname) references useinfo(id,name)
先在本表设好用来关联外部的字段,然后通过约束constraint 指向外部表
语法:
alter table 从表 add constraint 外键名称(形如:FK从表主表) foreign key 从表(外键字段) references 主表(主键字段);
student_id int not null,
constraint fk_cos_sco_cid FOREIGN KEY(course_id) references course(cid) on update on delete
alter table 表名 drop foreign key 外键名称
DELETE FROM student WHERE sid BETWEEN 4 AND 6;
TRUNCATE TABLE student
关系约束后面可以跟的词语有四个no action
, set null
, set default
,cascade
no action -- 表示不做任何操作,
set null -- 表示在外键表中将相应字段设置为null
set default -- 表示设置为默认值
cascade -- 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除
一对一:一个外健只能对应一个外键
使用 foreign key + unique
多对多:双方均对应对方的多个外键
新建一张xxx关系表
用关系表的外键导入源表的ID
任何加入索引的行为就是加速查找
规定该字段为唯一非空的主键,加速查找
规定该字段为唯一字段,不能有重复项,可以为空
unique ul_uq(uid)
unique ul_uq(uid,name) # 联合索引
# 修改表的唯一约束
alter table t_user
add constraint user_name_un
unique(name);
select uid,count(id) as count from t1 group by count(id) having count(id)>5
group by
结果下再筛选必须用having
函数名 | 解释 | 备注 |
---|---|---|
count | 数符合条件的数据条数 | 常用形式count(1),效果与count(xx)一样但效率更高 |
max | 求最大数 | |
min | 求最小数 | |
sum | 求总数 | |
avg | 求平均数 |
SELECT student.sname,score.mark
FROM score
LEFT JOIN student
ON score.student_id=student.sid;
SELECT student.sname,score.mark
FROM score
RIGHT JOIN student
ON score.student_id=student.sid;
SELECT student.sname,course.cname,score.mark
FROM score
LEFT JOIN student
ON score.student_id=student.sid
LEFT JOIN course
ON score.course_id=course.cid;
关键字在表中存在至少一个匹配时返回行。如果LEFT JOIN没有匹配,就不会列出这些行。
ORDER BY DESC # 倒序
ORDER BY ASC # 顺序
(SELECT * FROM score) AS A
SELECT DISTINCT student_id FROM score WHERE mark<60
CASE WHEN num<20 THEN 1 ELSE 0 END
SELECT * FROM score AS s1,score AS s2
结果为
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3
MySQL基础
标签:文本 schema 信息 http 数据 卡尔 trunc efault 大数