useradd -r -g mysql -s /bin/false mysql (-r)系统用户 不能登录
A temporary password is generated for root@localhost: d>#jT7rfoaz)
看是否启动 看进程 端口 直接连接 看日志
varchar (20) char(20)更耗空间
create table student_info(id int,name varchar(20),sex char(10));
root@sc 23:08 mysql>desc student_info;看表的结构
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
或者show create table student_info
数据在/datamysql 中
select ceil(1.5) floor(1.5) truncate(1.56,1) 结果:2,1,1.5 取整
sign(-1) 判断正负 -1 负数 0-0 1 正数
[root@hunan_cs_furong mysql]# cd sc
[root@hunan_cs_furong sc]# cat db.opt
default-character-set=utf8 默认字符集
default-collation=utf8_general_ci 字符集对应的校对规则
告诉我们这个库使用的字符集
[root@hunan_cs_furong sc]# ls
db.opt student_info.frm表结构文件 frame框架 student_info.ibd表的数据和索引(快速查找数据 描述数据的数据)
innodb data 默认使用存放引擎innodb 还有个myisam 存储引擎和表绑定
将MYSQL内存里的数据存放到磁盘 将磁盘里的数据读取到内存
create table student_info(id int,name varchar(20),sex char(10)) engine=myisam;
.frm (表结构数据) .MYD (myisam存储引擎存放数据data) .MYI(索引)
mysql多线程 mysqld_safe---mysqld
配置文件/etc/my.cnf
用socket槽 进程和进程之间通信的方式 共享内存 消息队列
文件socket (默认) 要求在同一台电脑上 实现一台电脑上不同进程之间通信的文件
网络socket ip+port 不同电脑不同进程之间的通信
create user 'xfb'@'%' identified by '123456';
grant all on *.* to 'xfb'@'%';
show processlist;看有哪些机器连接
desc 看表结构
存储引擎:MyISAM
/etc/my.cnf service mysqld restart flush privileges
skip-grant-tables跳过密码认证 当忘记密码的时候 登录进去 修改密码 然后刷新权限 然后再把配置文件这行注释掉
编译安装需要make make install make -j 2
mysql是二进制安装 安装速度快 版本5.7.37 登录就可以看 select version
auto-rehash tab补齐
prompt =\\u\\d\\R:\\m mysql> user database
authentication_plugin mysql_native_password密码验证插件
alter user 'xfb'@'%' identified with mysql_native_password by '1234';
drop user 'xfb'@'%'
show warning;
create table if not exists xieshan.ejiao(id int ,name varchar(20)) engine=myisam ;
select * from xieshan.ejiao
insert into ejiao(id,name) values(1,'he')
索引:描述数据的数据 相当于目录
给主键加索引 加快数据查询速度
create table test.xfb(
payment int not null primary key(不能出现重复的 不能null),
playerno int not null conment "球员编号",
payment_date date not null unique( 唯一性约束唯一不能出现一样的 但可以是NULL 空值也只能一次),
amout decimal(7,2)定点型精确值,总长度7位 保留两位 not null)
alter table xfb add name varchar(20);
alter table xfb modify name char(20);
alter table xfb change name username varchar(20);
zerofill 填充0
signed 有符号数 无符号数
set @@auto_increment_offset=10;起始值 设置系统变量
set @@auto_increment_increment=10;每次加十
三大数据类型:数值:整数 浮点型 定点型decimal
字符串 日期和时间 时间戳
特殊:GIS
create table t3(id tinyint unsigned)(0-255) 字段选型
tinyint 255 一个字节 id 年龄等 默认有符号(-128--127)
smallint 2个字节 0-65535
int 40忆 放不下电话号码(用varchar可变数据类型)
blob 二进制文本 放图片视频
timestamp时间戳 now()
库就是文件夹 表就是文件
DML语句 数据操作语言 data manipulation language
insert replace update delete select truncate help 数据库增删改查
DDL语句 数据定义语言 date definition language
create drop alter 建表建库
DCL语句 数据控制语言 data control language
grant revoke撤销
DQL语言 数据查询语言 Data query language
select
DBMS 数据库管理系统 database management system
OFS 指定awk输出分隔符
show engines 看存储引擎 innodb myisam csv(文本文件 以,分隔) memory(存储在内存 临时表) blackhole
支持外键 支持事务 行锁 支持哈希索引
innodb:是mysql默认存储引擎,如果应用对事务的完整性比较高,并发情况下要求数据一致性高,更新删除操作比较多
myisam:应用以读写操作和插入操作为主,很少更新和删除操作,并且对事务的完整性,并发性要求不高
memory:将所有数据保存在内存中,访问速度快,通常存放临时表,但是对表的大小有限制
事务:用来执行一组sql语句 一般insert update delete语句 维护数据库的完整性
原子性(如果发生错误会回滚到事务开始之前状态) 一致性(完整性) 持久性
隔离性(允许多个事务对数据进行修改 隔离级别:读未提交 读提交 可重复读 串行化)
读未提交:事务可以读取其他事务未提交的数据,会产生脏数据,幻读
读以提交:只能读其他事务已经提交的数据,幻读
可重复读:事务在整个事务期间看到的数据都是一致的,即使其他事务提交了数据更改,幻读 默认
丢失更新:如果两个事务同时对数据进行修改则会导致问题
悲观锁:认为两个事务更新操作一定会发生丢失更新:通过语句后面加for update来实现行级锁select * from t_account wheret.id='1' for update;
乐观锁:认为事务不一定会产生丢失更新,让事务进行并发修改,不对事务进行锁定,可以对数据表自增version字段或时间戳timestamp进行数据修改,数据库会检测version字段或者时间戳是否与原来的一致,若不一致抛出异常
select @@transaction_isolation
并发事务问题:脏读(一个事务读到另外一个事务未提交的数据) 不可重复读(一个事务先后读取同一条记录,但两次读取的数据不同) 幻读(一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在)
begin或者start transaction 开始事务
commit提交事务
rollback 回滚 撤销所有未提交的修改
savepoint identifier在事务中创建一个保存点
ROLLBACK TO identifier 把事务回滚到标记点;
set transaction设置事务隔离级别
set autocommit=1设置自动提交
set session(当前) transaction isolation level
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
IF (条件) THEN
COMMIT; -- 提交事务
ELSE
ROLLBACK; -- 回滚事务
END IF;
alter table mysql
add column新增列 modify修改数据类型 change改列名 drop删除列 rename改表名
ALTER TABLE employees 创建唯一索引
ADD CONSTRAINT idx_email UNIQUE (email);
select distinct (取某列唯一的值 去重)
select ... where id=1
<>不等于 between like
Select * from emp where ename like 'M%';
查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。
- % 表示多个字值,_ 下划线表示一个字符;
UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
SELECT * FROM Websites
WHERE name REGEXP '^[A-H]'; name以a-h字母开头的网站 模式匹配或者RLIKE
三个列(url、alexa 和 country)结合一起,创建一个名为 "site_info" 的别名:
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;
SELECT * FROM employees
ORDER BY department_id ASC, hire_date DESC;
SELECT product_name, price
FROM products
ORDER BY price DESC NULLS LAST; 把null值放到最后 first
mysql> SELECT name, SUM(signin) as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name | signin_count |
+--------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| NULL | 16 |
在根据名字分组得基础上再根据登录次数统计
select coalesce(a,b,c);
如果 a==null,则选择 b;如果 b==null,则选择 c;如果 a!=null,则选择 a;如果 a b c 都为 null ,则返回为 null(没意义)。
mysql> SELECT coalesce(name, '总数'), SUM(signin) as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | signin_count |
+--------------------------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 总数 | 16 |
+--------------------------+--------------+
select * , columnName1+ifnull(columnName2,0) from tableName;
columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。