日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 基本语法

發布時間:2023/12/20 数据库 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 基本语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

待完成…

一、Mysql基礎

SQL的分類:

1、DDL—數據定義語言(Data Define Language):create(創建),alter(修改),drop(刪除),TRUNCATE(截斷),RENAME(重命名); 2、DML—數據操縱語言(Data Manipulation Language):select(查詢),delete(刪除),update(更新),insert(新增); 3、DCL—數據控制語言(Data Control Language):grant(添加權限),revoke(回收權限);

DDL操作:
注意:使用DDL語言時,必須在動詞后跟上數據庫對象名詞(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)。
數據庫的鏈接

# mysql -h 127.0.0.1 -u root -p

常用的參數解釋:

-A 不預讀數據庫信息,提高連接和切換數據庫速度,使用--disable-auto-rehash代替 --default-character-set 使用的默認字符集 -e 執行命令并退出 -h 主機地址 -p 連接到服務器時使用的密碼 -P 連接的端口號

創建數據庫:

create database test1 ;

查看數據庫:

show databases;

選擇數據庫:

use mysql;

刪除數據庫:

drop database test1;

創建表:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database_name.] <table_name> (<column_name> <data_type> [[not] null],… )

注:TEMPORARY:指明創建臨時表
  IF NOT EXISTS:如果要創建的表已經存在,強制不顯示錯誤消息
  database_name:數據庫名
  table_name:表名
  column_name:列名
  data_type:數據類型
  
查看定義:

desc emp;

查看創建的表:

show create table emp ;

更新表名:

alter table emp rename users;

刪除表:

drop table emp;

修改表字段:

alter table emp modify ename varchar(30);

增加表字段:

alter table emp add column age int(3);

修改表字段:

alter table emp change age age int(4);

刪除表字段:

alter table emp drop column age;

change和modify:

前者可以修改列名稱,后者不能. change需要些兩次列名稱.

字段增加修改 add/change/modify/ 添加順序:

1 add 增加在表尾. 2 change/modify 不該表字段位置. 3 修改字段可以帶上以下參數進行位置調整(frist/after column_name);alter table emp change age age int(2) after ename; alter table emp change age age int(3) first;

DML語句:
插入記錄:

//指定字段, //自增,默認值等字段可以不用列出來,沒有默認值的為自動設置為NULL insert into emp (ename,hiredate,sal,deptno) values ('jack','2000-01-01','2000',1);//可以不指定字段,但要一一對應 insert into emp values ('lisa','2010-01-01','8000',2);

批量記錄:

insert into emp values ('jack chen','2011-01-01','18000',2),('andy lao','2013-01-01','18000',2);

更新記錄:

update emp set sal="7000.00" where ename="jack";update emp e,dept d set e.sal="10000",d.deptname=e.ename where e.deptno=d.deptno and e.ename="lisa";

刪除記錄:

//請仔細檢查where條件,慎重 delete from emp where ename='jack';

查看記錄:

//查看所有字段 select * from emp;//查詢不重復記錄 select distinct(deptno) from emp ; select distinct(deptno),emp.* from emp ;//條件查詢 //比較運算符: > < >= <= <> != ... //邏輯運算符: and or ... select * from emp where sal="18000" and deptno=2;

排序

//desc降序,asc 升序(默認) select * from emp order by deptno ; select * from emp order by deptno asc; select * from emp order by deptno desc,sal desc;

限制記錄數:

select * from emp limit 1; select * from emp limit 100,10; select * from emp order by deptno desc,sal desc limit 1;

聚合:函數:count():記錄數 / sum(總和); / max():最大值 / min():最小值

select count(id) from emp ; select sum(sal) from emp ; select max(sal) from emp ; select min(sal) from emp ;

group by分組:

//分組統計 select count(deptno) as count from emp group by deptno; select count(deptno) as count,deptno from emp group by deptno; select count(deptno) as count,deptno,emp.* from emp group by deptno;

having 對分組結果二次過濾:

select count(deptno) as count,deptno from emp group by deptno having count > 2;

with rollup 對分組結果二次匯總:

select count(sal),emp.* from emp group by sal, deptno with rollup ;

表連接:

  • left join :左連接,返回左表中所有的記錄以及右表中連接字段相等的記錄;
  • right join :右連接,返回右表中所有的記錄以及左表中連接字段相等的記錄;
  • inner join: 內連接,又叫等值連接,只返回兩個表中連接字段相等的行;
  • full join:外連接,返回兩個表中的行:left join + right join;
  • cross join:結果是笛卡爾積,就是第一個表的行數乘以第二個表的行數。

內連接:只返回兩個表中連接字段相等的行

select * from emp as e,dept as d where e.deptno=d.deptno; select * from emp as e inner join dept as d on e.deptno=d.deptno;

左外連接:包含左表中所有的記錄以及右表中連接字段相等的記錄

select * from emp as e left join dept as d on e.deptno=d.deptno;

右外連接:包含右表中所有的記錄以及左表中連接字段相等的記錄

select * from emp as e right join dept as d on e.deptno=d.deptno;

子查詢:

//=, != select * from emp where deptno = (select deptno from dept where deptname="技術部"); select * from emp where deptno != (select deptno from dept where deptname="技術部");//in, not in //當需要使用里面的結果集的時候必須用in(); select * from emp where deptno in (select deptno from dept where deptname="技術部"); select * from emp where deptno not in (select deptno from dept where deptname="技術部");//exists , not exists //當需要判斷后面的查詢結果是否存在時使用exists(); select * from emp where exists (select deptno from dept where deptno > 5); select * from emp where not exists (select deptno from dept where deptno > 5);

記錄聯合:

union:返回去重之后的結果 select ename from emp union select ename from emp;union all:返回所有結果 select ename from emp union all select ename from emp;

DCL語句:
添加權限:

grant select,insert on test.* to 'db_user_1'@'localhost' identified by '123456'; flush privileges;

回收權限:

revoke insert on test.* from 'db_user_1'@'localhost';

二、Mysql數據類型

整數類型:

指定寬度:
指定顯示的寬度為5,不影響實際數據

create table t1 (id int , id2 int(5));

注:INT(4)與INT(5),括號中的字符表示顯示寬度,整數列的顯示寬度與MySQL需要用多少個字符來顯示該列數值,與該整數需要的存儲空間的大小都沒有關系,INT類型的字段能存儲的數據上限還是2147483647(有符號型)和4294967295(無符號型)。其實當我們在選擇使用INT的類型的時候,不論是int(4)還是int(5),它在數據庫里面存儲的都是4個字節的長度。
zerofill:
采用零填充,不足5位采用0填充,配合數據寬度

create table t2 (id int , id2 int(5) zerofill);

unsigned:

create table t3 (id int , id2 int(5) unsigned);

auto_increment:
只用于整數類型
產生唯一標識
值從1開始,逐行增加
一個表中最多只能存在一個自增列
自增列應該定義為not null
自增列應該這只為 primary key 或者 unique

id int not null auto_increment primary key

浮點數類型

定點數類型

float , double , decimal 特點:
1.(m,d)表示方式:m指的是整數位,d指的是小數位(又稱作精度和標度)
2.float/double四舍五入丟失精度,decimal會截斷數據并輸出warning
3.如果不指定精度,float/double采用操作系統默認,decimal則是(10,0)
位類型

1 存放位字段值
2 指定存放多位二進制的長度,默認為1(范圍:1~64)
3 讀取需要bin()/hex(),普通的select讀取結果為null
4 插入的值會轉化為二進制碼,如果長度運行則正常處理,否則插入失敗

create table t6 (id bit(1)); select bin(id) from t6;

日期和時間類型

當前系統日期

timestamp:返回yyyy-mm-dd hh:mm:ss 寬度19timestamp:不適合存放久遠日期,超出范圍則會采用零值填充//不同格式的顯示零值格式 d date, t time,dt datetime +------------+----------+---------------------+ | d | t | dt | +------------+----------+---------------------+ | 2016-11-25 | 14:52:44 | 2016-11-25 14:52:44 | +------------+----------+---------------------+//默認值的體現 id1 timestamp +---------------------+ | id1 | +---------------------+ | 2016-11-25 14:55:45 | +---------------------+//timestamp字段只能有一個"CURRENT_TIMESTAMP" +-------+-----------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+---------------------+-----------------------------+ | id1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | id2 | timestamp | NO | | 0000-00-00 00:00:00 | | +-------+-----------+------+-----+---------------------+-----------------------------+//timestamp和時區相關:SYSTEM 指的是和主機時區保持一致 show variables like "%_zone"; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | CST | | time_zone | SYSTEM | +------------------+--------+//修改時區 set time_zone="+9:00"/在 [mysqld] 之下加 default-time-zone=timezone

年份

year:默認為4位格式.1901~2155和0000. 2位的已經不推薦,高版本已經不支持了.

timestamp和datetime區別:
1、timestamp支持范圍小(1970-01-01 08:00:01到2038年某個點)
2、表中第一個timestamp字段,會默認采用當前系統時間.如果更新其他字段,該字段沒有賦值的話,則該字段會自動更新.如果指定字段不滿足規格,則采用零值填充
3、timestamp查詢和插入都會受到當地時區影響

datetime支持范圍寬度大(1000-01-01 00:00:00到9999-12-31 23:23:59)

字符串類型

char和varchar的區別:

  • char定長,效率高,在創建字段的時候就已經指定,一般用于固定長度的表單提交數據存儲
  • char在檢索的時候回去掉尾部的空格
  • varchar是動態長度
  • varchar在檢索的時候回保留尾部的空格
  • varchar將實際內容單獨存儲在聚簇索引之外,內容開頭用1到2個字節表示實際長度(長度>255時需要2個字節)
  • 字符類型若為gbk,每個字符最多占2個字節,字符類型若為utf8,每個字符最多占3個字節

枚舉類型:

  • 枚舉在集合中取值,只能取一個
  • 如果值不存在則采用第一個值為默認
  • 如果插入NULL不會出錯,會將NULL寫入表
  • 成員個數在1255占用1個字節,在25565535占用2個字節,節約資源
create table `t8` (`gender` enum('m','f') default null ) engine=innodb default charset=utf8

集合類型

  • 集合類型和枚舉很像,但是支持多值選擇
  • 最多可以保存64個成員,每8個成員占1個字節
  • 重復值只會插入一次,如果查出集合范圍則插入為null
create table t9 (col set ('a','b','c','d'));

三、Mysql運算符

未完待續。。。。

四、Mysql常用的函數

五、MySQL管理工具和應用程序

六、Mysql存儲引擎

七、常用數據類型的選擇

八、Mysql 字符集

九、Mysql索引設計和使用

十、Mysql中的視圖

十一、事務控制和鎖定

十二、其它
1、mysql–修改自增主鍵的初始值

alter table m_money_process AUTO_INCREMENT =10;

參考:
在此非常感謝以下技術博文
來源:簡書 戰神悟空-Mysql 基礎

總結

以上是生活随笔為你收集整理的MySQL 基本语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。