初学日常记录 sql 一

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从库查询(主从复制,读写分离 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值