Win mysql安装:Windows下安装MySQL详细教程 - m1racle - 博客园 (cnblogs.com)
Mac mysql安装:在MAC上安装mysql_码农伍的博客-CSDN博客_mac安装mysql
mysql -h 主机名 -P 端口 -u 用户名 -p 密码
mysql -h 127.0.0.1 -P 3306 -u root -p root
CREATE DATABASE [IF NOT EXISTS] 数据库名 CHARACTER SET 数据库采用的字符集 COLLATE 字符集的校对规则
CREATE DATABASE [IF NOT EXISTS] jwt CHARACTER SET utf8 COLLATE utf8_bin
DROP DATABASE [IF EXISTS ] 数据库名
SHOW DATABASES
SHOW CREATE DATABASE `数据库名`
注:创建数据库、表的时候,为了规避关键字,可以使用反引号解决
#备份数据库
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 路径/文件名.sql
#备份数据库中表
mysqldump -u 用户名 -p 数据库 表1 表2 表n > 路径/文件名.sql
注:该指令要在DOS下执行
Source 路径/文件名.sql
注:该指令要进入mysql下执行
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
TINYINT(unsigned) | 1 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 |
SMALLINT(unsigned) | 2 | 0 | 65535 |
MEDIUMINT | 3 | -8388508 | 8388607 |
MEDIUMINT(unsigned) | 3 | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 |
INT(unsigned) | 4 | 0 | 16777215 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
BIGINT(unsigned) | 8 | 0 | 18446744073709551615 |
CREATE TABLE t1 (id TINYINT);#默认是有符号的,-128~127
CREATE TABLE t2 (id TINYINT UNSIGNED);#指定unsinged,就是无符号0~255
如果 VARCHAR 不够用,可以使用mediumtext、text、longtext
CREATE TABLE b_name (
birthday DATE , -- 生日
job_time DATETIME, -- 记录年月日时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置
SELECT * FROM b_name;
INSERT INTO b_name(birthday, job_time)
VALUES('2022-11-11','2022-11-11 10:10:10');
-- 如果我们更新b_name表的某条记录,login_time列会自动的以当前时间进行更新
CREATE TABLE 表名(
field1 datatype NOT NULL AUTO_INCREMENT,PRIMARY KEY,
field2 datatype DEFAULT 'test',
field3 datatype,
)character set 字符集 collate 校对规则 engine 引擎
注:
field:指定列名,datatype: 指定列类型(字段类型)
character set :如不指定则为所在数据库字符集
collate:如不指定则为所在数据库校对规则
engine:引擎(这个涉及内容较多,后面单独讲解)
CREATE TABLE `user`(
id INT,
name VARCHAR (255),
password VARCHAR (255),
birthday DATE
)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB ;
DESC 表名 -- 显示表结构,可以查看表的所有列
DROP TABLE [IF EXISTS] 表名
ALTER TABLE 表名
ADD 列名 数据类型 [DEFAULT expr]
-- 在员工表emp中增加一个image列,varchar类型(要求在resume后面),默认不为空,默认数据为test。
ALTER TABLE emp
ADD image VARCHAR(32) NOT NULL DEFAULT 'test'
AFTER RESUME
DESC emp -- 显示表结构,可以查看表的所有列
ALTER TABLE 表名
MODIFY 列名 数据类型 [DEFAULT expr]
-- 修改job列,使其长度为60。
ALTER TABLE emp
MODIFY job VARCHAR(60) NOT NULL DEFAULT 'test'
ALTER TABLE 表名
DROP 列名
-- 删除sex列。
ALTER TABLE emp
DROP sex
RENAME TABLE 表名 TO 新表名
-- 修改表名改为employee。
RENAME TABLE emp TO employee
ALTER TABLE 表名 CHARACTER SET utf8
-- 修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
ALTER TABLE 表名
CHANGE 列名 新列名 数据类型 [DEFAULT expr]
-- 列名name 修改为user_name
ALTER TABLE employee
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT 'test'
CRUD
即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。
-- 普通插入
INSERT INTO 表名 VALUE (value1,value2)
-- 指定要插入数据的列
INSERT INTO 表名 (column1,column2) VALUE (value1,value2)
-- 批量插入(应注意SQL的长度限制)
INSERT INTO TABLE VALUES (value1,value2),(value1,value2)
-- 把一个表的数据插入到另一个表中(插入全部数据)
INSERT INTO 目标表 SELECT * FROM 来源表 [WHERE key=value]
-- 把一个表的数据插入到另一个表中(指定字段)
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2,... FROM 来源表 [WHERE key=value]
SELECT column1,column2 FROM 表名
-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student;
-- 过滤表中重复数据。
SELECT DISTINCT english FROM student;
-- 使用表达式对查询列运算
SELECT `name`, (chinese+english+math) FROM student;
-- 在所有学生总分加10 分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数。
SELECT `name` , (chinese + english + math + 10) AS total_score FROM student;
-- 一次更新一个字段
UPDATE table SET column1 = value1 WHERE 条件 -- 如果不加WHERE条件,UPDATE语句会默认更新所有表,慎用。
-- 一次更新多个字段
UPDATE table SET column1 = value1,column2 = value2 WHERE 条件
-- 将所有员工薪水修改为5000 元。
UPDATE employee SET salary = 5000
-- 将姓名为小妖怪的员工薪水修改为3000 元。
UPDATE employee SET salary = 3000 WHERE user_name = '小妖怪'
-- 将老妖怪的薪水在原有基础上增加1000 元
UPDATE employee SET salary = salary + 1000 WHERE user_name = '老妖怪'
-- 可以修改多个列的值
UPDATE employee SET salary = salary + 1000 , job = '码农' WHERE user_name = '老妖怪'
SELECT * FROM employee;
DELETE FROM 表名 WHERE column1 = value1
-- 删除表中名称为’老妖怪’的记录。
DELETE FROM employee WHERE user_name = '老妖怪';
-- 删除表中所有记录, 慎用。
DELETE FROM employee;
事务用于保证数据的一致性它由一组相关的 dml 语句组成,该组的 dml 语句要么全部成功,要么全部失败。如:转账就要用事务来处理,用以保证数据的一致性。
当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户改表的数据
-- 1. 创建一张测试表
CREATE TABLE test
( id INT,
`name` VARCHAR(32));
-- 2. 开始事务
START TRANSACTION
-- 3. 设置保存点
SAVEPOINT a
-- 执行dml 操作
INSERT INTO test VALUES(100, 'tom');
SELECT * FROM test;
SAVEPOINT b
-- 执行dml 操作
INSERT INTO test VALUES(200, 'jack');
-- 回退到b
ROLLBACK TO b
-- 继续回退a
ROLLBACK TO a
-- 如果这样, 表示直接回退到事务开始的状态.
ROLLBACK
-- 提交事务
COMMIT
1.多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。 2.如果不考虑隔离性,可能会引发如下问题:
1. 查看当前会话隔离级别
select @@tx_isolation;
2.查看系统当前隔离级别
select @@global.tx_isolation;
3. 设置当前会话隔离级别
set session transaction isolation level repeatable read;
4.设置系统当前隔离级别
set global transaction isolation level repeatable read;
5.mysql默认的事务隔离级别是repeatable read ,一般情况下,没有特殊
要求,没有必要修改(因为该级别可以满足绝大部分项目需求)
●全局修改,修改my.ini配置文件,在最后加上 #可选参数有: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
select DAYOFWEEK('1998-02-03')
-> 3
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
返回date的月份中日期,在1到31范围内。
mysql> select DAYOFMONTH('1998-02-03');
-> 3
返回date在一年中的日数, 在1到366范围内。
mysql> select DAYOFYEAR('1998-02-03');
-> 34
返回date的星期名字。
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
返回date的月份名字。
mysql> select MONTHNAME("1998-02-05");
-> 'February'
返回date一年中的季度,范围1到4。
mysql> select QUARTER('98-04-01');
-> 2
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。
mysql> select WEEK('1998-02-20');
-> 7
2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。 如果第二个参数是0,星期从星期天开始, 如果第二个参数是1,从星期一开始。
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
返回date的年份,范围在1000到9999。
mysql> select YEAR('98-02-03');
-> 1998
返回date的月份,范围1到12。
mysql> select MONTH('1998-02-03');
-> 2
返回date的月份,范围1到31。
mysql> select MONTH('1998-02-03');
-> 3
返回time的小时,范围是0到23。
mysql> select HOUR('10:05:03');
-> 10
返回time的分钟,范围是0到59。
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
回来time的秒数,范围是0到59。
mysql> select SECOND('10:05:03');
-> 3
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
mysql> select PERIOD_ADD(9801,2);
-> 199803
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
mysql> select PERIOD_DIFF(9802,199703);
-> 11
向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
//interval是固定标志,expr 表示数量,可以为正负,表示加减,type表示日期类型 可以是yy,ww,dd等分别表示,年,周,天等
// 得到当前时间增加1个小时的结果
select date_add(now(),interval 1 hour)
// 得到当前时间增加1天的结果
select date_add(now(),interval 1 day)
// 得到当前时间减少72个小时的结果
select date_add(now(),interval -72 hour)
// 还有一些更加高级的用法,比如增加一天一小时一分一秒
// 但是如果你不太喜欢这种用法,你仍然可以使用等同于该数值的second来进行加减
date_add(now(),interval '1 1:1:1' day_second)
SQL JOIN 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。