天天看點

SQL:mysql常用語句

RDBMS即關系資料庫管理系統

(Relational Database Management System)

oracle

mysql

sqlserver

db2

postgresql

sqlite

excel

資料庫(Database)

資料表 table

列 column

行 row

備援

主鍵 primary key

外鍵 foreign key

複合鍵

索引

參照完整性

MySQL 資料類型

三類:數值、日期/時間和字元串(字元)

數值

TINYINT 1 位元組(0,255)

SMALLINT 2 位元組(0,65 535)

MEDIUMINT 3 位元組

INT或INTEGER 4 位元組 BIGINT 8 位元組

FLOAT 4 位元組 DOUBLE 8 位元組 DECIMAL

日期時間

DATE 日期值

TIME 時間值或持續時間

YEAR 年份值

DATETIME 混合日期和時間值

TIMESTAMP 時間戳

字元串

CHAR 0-255位元組 、VARCHAR 0-65535 位元組

BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

事務是必須滿足4個條件(ACID):

Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)

1、事務的原子性:一組事務,要麼成功;要麼撤回。

2、穩定性 : 有非法資料(外鍵限制之類),事務撤回。

3、隔離性:事務獨立運作。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。

事務的100%隔離,需要犧牲速度。

4、可靠性:軟、硬體崩潰後,InnoDB資料表驅動會利用日志檔案重構修改。

可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候吧事務儲存到日志裡。

指令:

> mysql -uroot -p123456 登陸
mysql> grant all on test.* to 'pengshiyu'@'localhost'
    -> identified by '123456'; 建立使用者
mysql> quit  退出

mysql> show databases;  檢視資料庫
mysql> create database test;  建立資料庫
mysql> create database test charset utf8;  指定字元集支援中文
mysql> show create database test;  檢視資料庫資訊
mysql> drop database test;  删除資料庫
mysql> use test;  進入資料庫

mysql> create table student(
    -> id int auto_increment,
    -> name char(32) not null,
    -> age int not null,
    -> register_data date not null,
    -> primary key (id)
    -> );  建立表
mysql> show tables;  檢視表
mysql> desc student;   檢視表結構
mysql> describe student;   檢視表結構
mysql> show columns from student;  檢視表結構
mysql> insert into student(name, age, register_data)
    -> values('tom', 27, '2018-06-25'); 增加記錄
mysql> select * from student;  查詢資料
mysql> select * from student\G  按行輸出
mysql> select * from student limit 3;  限制查詢數量
mysql> select * from student limit 3 offset 5;  丢棄前5條數
mysql> select * from student where id > 3; 條件查詢
mysql> select * from  student where register_data like "2018-06%";  模糊查詢
mysql> update student set name = 'cxx' where id = 10;  修改
mysql> delete from student where id = 10;  删除
mysql> select * from student order by age; 排序預設ascend
mysql> select * from student order by age desc;  降序descend
mysql> select age,count(*) as num from student group by age; 分組
mysql> select name, sum(age) from student group by name with rollup; 彙總
mysql> select coalesce(name,'sum'), sum(age) from student
    -> group by name with rollup; 彙總取别名

mysql> alter table student add sex enum('M','F');  增加字段
mysql> alter table student drop sex;  删除字段
mysql> alter table student modify sex enum('M','F') not null; 修改字段類型
mysql> alter table student modify sex
    -> enum('M','F') not null default 'M';  設定預設值
mysql> alter table student change sex gender
    -> enum('M','F') not null default 'M'; 修改字段名稱

mysql> create table study_record(
    -> id int not null primary key auto_increment,
    -> day int not null,
    -> stu_id int not null,
    -> constraint fk_student_key foreign key (stu_id) references student(id)
    -> );命名外鍵限制

建立表
mysql> create table A(a int not null);
mysql> create table B(b int not null);

插入資料
mysql> insert into A(a) values (1);
mysql> insert into A(a) values (2);
mysql> insert into A(a) values (3);
mysql> insert into A(a) values (4);

mysql> insert into B(b) values (3);
mysql> insert into B(b) values (4);
mysql> insert into B(b) values (5);
mysql> insert into B(b) values (6);
mysql> insert into B(b) values (7);

交集 内連接配接
mysql> select * from A inner join B on A.a = B.b;
mysql> select a.*, b.* from A inner join B on A.a = B.b;
差集
mysql> select * from A left join B on A.a =B.b; 左外連接配接
mysql> select * from A right join B on A.a =B.b; 右外連接配接
并集
mysql> select * from a left join b on a.a=b.b union
    ->  select * from a right join b on a.a = b.b; 全連接配接

mysql> begin; 開始事務
mysql> rollback; 復原事務
mysql> commit;  送出事務
mysql> show index from student; 檢視索引
mysql> create index name_index on student(name(10)); 建立索引
mysql> drop index name_index on student;删除索引