mysql基础学习1

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。

相关推荐
Lbs_gemini06031 小时前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
MC何失眠1 小时前
vulnhub靶场【哈利波特】三部曲之Fawkes
网络·python·学习·网络安全
MarisolHu2 小时前
前端学习笔记-Vue篇-02
前端·vue.js·笔记·学习
我的老子姓彭4 小时前
C++学习笔记
c++·笔记·学习
都要好好的O5 小时前
2.mysql 中一条更新语句的执行流程是怎样的呢?
数据库·mysql
炸毛的飞鼠5 小时前
PWN的简单了解
笔记·学习
ydl11286 小时前
机器学习周志华学习笔记-第13章<半监督学习>
笔记·学习·机器学习
zxguan6 小时前
MySQL 学习 之 数值计算精度问题
数据库·mysql·精度
付聪12107 小时前
MySQL覆盖索引
mysql
椛椛~7 小时前
六、文本搜索工具(grep)和正则表达式
数据库·mysql