1.创建DB user
create database duodata;
grant all privileges on *.* to duo@'%' identified by 'mysql123'; //创建用户,赋予权限,设置密码
flush privileges; //刷新权限
2.杀sql进程
mysql -uroot -pmysql123
mysql -u root -pmysql123
mysql -u root -p mysql123 //登录不上去' mysql123',系统会任务 认为-p后的空格也是密码,导致密码错误,登录不上,注意:-p后面输入密码,一定不能有空格
注意:命令行不能带有密码,否则,history查看泄露
mysql>show processlist; //查看当前进程
+----+------+----------------------+-------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+----------------------+-------+---------+------+----------+------------------+
| 30 | root | localhost | NULL | Sleep | 5247 | | NULL |
| 31 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 32 | root | LAPTOP-OAANN5CV:7475 | mysql | Sleep | 3750 | | NULL |
| 33 | root | LAPTOP-OAANN5CV:7476 | mysql | Sleep | 0 | | NULL |
| 34 | root | LAPTOP-OAANN5CV:7477 | mysql | Sleep | 2393 | | NULL |
+----+------+----------------------+-------+---------+------+----------+------------------+
5 rows in set (0.00 sec)
mysql> kill 30;//mysql命令中没有kill -9,kill 之后加ID号:kill ID;
看时间kill,找到哪个消耗时间长的,有可能导致mysql服务夯住、锁死,--》需要确认清楚这个sql到底能不能kill,不能无脑kill,生产商最忌直接kill,会导致数据丢失。
3.字段类型
数值类型:
int整数
long长整型
float单精度
double双精度
decimal小数值 一般和金额挂钩
字符串类型:
char 字节 定长 0-255个字节 会自动补全255字节
varchar 字符串 变长 0-65535字节
日期:
date 日期 YYYY-MM-DD
time 时间 HH:SS:DD
datetime 年月日时分秒 YYYY-MM-DD HH:SS:DD
timestamp 年月日时分秒 YYYY-MM-DD HH:SS:DD
4.sql类型
DDL数据定义语言:create deop
DML数据操作语言:insert update delete select 增删改查
DCL数据控制语言:grant
SQL 语句对大小写不敏感:SELECT 等效于 select
5.建表规划
use ssndata; //切换数据库
create table ssndata(
id int(11) not null auto_increment, //不能为空,自增长
name varchar(200),
age int(3),
createuser varchar(200) ,
createtime timestamp not null default current_timestamp,//创建时间不能为空,获取当前时间
updateuser varchar(200) ,
updatetime timestamp not null default current_timestamp on update current_timestamp,
//修改时间不能为空,更新当前时间
primary key (id) //主键
);
select * from ssndata;//SELECT * FROM 表名称 从ssndata的表中获取所有的内容

insert into ssndata(name,age,createuser,updateuser) values('ssn','22','duo','duo');
insert into ssndata(name,age,createuser,updateuser) values('YN','18','duo','duo');

update ssndata set age=19 where id =1;

a.表名称 字段名称 不能是中文 不能是汉语拼音
b.统一风格: 已经存在的表 风格是什么==>leader check
create_user
createuser
新项目 风格是什么 ==》 by you
ctime
cretime
createtime
cre_time
create_time
若多人创建字段名称不一样,关联起来会很麻烦
c.第一个字段 必然是 id 自增长 主键 无意义 (懂不懂mysql)
d.一张表只有一个主键 primary key==》id
unique+not null
业务字段 比如需要唯一 unique约束 ,不如订单号不能相同
假设:上表中name为唯一的,现在继续插入
insert into ssndata(name,age,createuser,updateuser) values('ssn','22','duo','duo');

是可以继续插入name相同的数据,先删除掉重复数据,然后创建唯一约束
delete from ssndata where id =3;

利用DBeaver创建唯一约束

或者
ALTER TABLE duodata.ssndata
ADD CONSTRAINT ssndata_un UNIQUE KEY (name) ;

我再来试试插入以存在的name数据
insert into ssndata(name,age,createuser,updateuser) values('ssn','22','duo','duo');
报错了org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1062] [23000]: Duplicate entry 'ssn' for key 'ssndata_un'

e.后四个字段 建议都要加
用户 修改用户
创建时间 修改时间
f.业务字段 注释加上 *****
COMMENT '用户名称'
COMMENT '用户年龄'
后四行一般可以不用加

拷贝sql语句如下:
ALTER TABLE duodata.ssndata MODIFY COLUMN id int(11) auto_increment NOT NULL COMMENT '用户id';
ALTER TABLE duodata.ssndata MODIFY COLUMN name varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL COMMENT '用户名称';
ALTER TABLE duodata.ssndata MODIFY COLUMN age int(3) NULL COMMENT '用户年龄';
ALTER TABLE duodata.ssndata MODIFY COLUMN createuser varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL COMMENT '创建者';
ALTER TABLE duodata.ssndata MODIFY COLUMN createtime timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间';
ALTER TABLE duodata.ssndata MODIFY COLUMN updateuser varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL COMMENT '修改者';
ALTER TABLE duodata.ssndata MODIFY COLUMN updatetime timestamp DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL COMMENT '修改时间';

g.ENGINE=InnoDB CHARSET

DEFAULT CHARSET=latin1 字符集
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| duodata |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> show create database duodata;
+-----------+----------------------------------------------------------------------+
| Database | Create Database |
+-----------+----------------------------------------------------------------------+
| ssndata | CREATE DATABASE `duodata` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+-----------+----------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
//创建database的时候并没有设置字符集,duodata默认latin1字符集
database 字符集
table字符集
column 字符集
服务端 字符集
客户端字符集
mysql> show variables like '%char%'
-> ;
+--------------------------+---------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.6.23-linux-glibc2.5-x86_64/share/charsets/ |
+--------------------------+---------------------------------------------------------------+
8 rows in set (0.00 sec)
mysql>
字符集

6.增删改查
insert into ssndata(name,age,createuser,updateuser) values('ssn','22','duo','duo');
delete from ssndata where id =3;
update ssndata set name='kaiyue',age=19 where id =1;
select * from ssndata //切记生产写sql不要加*
select id,name,age from ssndata;
7.delete from ssndata
delete from rzdata 切记要加where条件,不然直接删除表数据了
删除时候确认清楚条件
update delete切记加where条件 操作时间确认清楚条件
binlog文件恢复 arch/mysql-bin.000001 要去查下如何文件恢复
例如条件:where createtime>='2019-01-01 00:00:00'
select也可以限制查询范围
比如:数据库有一亿条数据,查看所有数据,可能导致其他服务夯住
假设我们需要前100条数据:
select id,name,age from ssndata limit 100;
select id,name,age from ssndata where 条件;
假设我们需要的数据量庞大,且不影响其他重要的服务,
也可以使用slava从库查询(主从复制,读写分离 )
4243

被折叠的 条评论
为什么被折叠?



