MariaDB數據庫命令與SQL語句

                             MariaDB數據庫命令與SQL語句
mysql

----------------------------------------------------------------------------------------------------------------------------------------------
sql


1、數據庫客戶端命令數據庫

一、mysql,鏈接數據庫安全

    -A,--no-auto-rehash 禁止補全服務器

    -u,--user= 用戶名,默認爲rootsocket

    -U,以安全模式登陸tcp

    -h,--host= 服務器主機,默認爲localhostide

    -p,--passowrd= 用戶密碼,建議使用-p,默認爲空密碼函數

    -P,--port= 服務器端口工具

    -S,--socket= 指定鏈接socket文件路徑

    -D,--database= 指定默認數據庫

    -C,--compress 啓用壓縮

    -e SQL,「 執行SQL命令

    -V,--version 顯示版本

    -v,--verbose 顯示詳細信息

    --print-defaults 獲取程序默認使用的配置

二、服務器監聽的兩種socket地址

    ip socket:監聽在tcp的3306端口,支持遠程通訊

    unix sock:監聽在sock文件上,僅支持本機通訊

三、執行命令

    (1)mysql -uUSER -pPASSWORD,鏈接數據庫,此處也能夠輸入mysql -uUSER -p,回車後彈出輸入密碼也能夠。指令中-u後的用戶和-p後的密碼與各自的選項沒有空格image.png

    (2)mysql -uroot -pPASSWORD < /路徑/DBFILE,導入數據庫

四、其它工具

    mysql_secure_installation 一個腳本,輔助及設置工具

    mysqldump    備份工具

    mysqladmin    基於mysql協議管理mysql的工具

    mysqlimport    數據導入工具

五、若是寫腳本須要插入SQL數據,能夠將命令按照SQL語句寫入一個文件,此時用命令

    mysql -uUSER -pPASSWORD < SQLFILE

六、配置文件

    執行順序爲後面文件覆蓋前面的文件,最下方文件優先級最高

    /etc/my.cnf                              Global選項 

    注:/etc/my.cnf的[mysqld]下添加skip_networking=1,表示關閉遠程端口,只能本機鏈接本機數據庫  

    /etc/mysql/my.cnf                   Global選項

    SYSCONFDIR/my.cnf            Global選項

    $MYSQL_HOME/my.cnf        Server-specific 選項

    --defaults-extra-file=path

    ~/.my.cnf                                User-specific 選項

注:工做中可能須要更改數據庫提示符以區分環境,建議在/etc/profile.d/下新建個.sh文件,裏面寫上export MYSQL_PS1="(\u@\h \v)[\d]>",以後 . 啓動一次該腳本image.png

或者在/etc/my.cnf.d/mysql-clients.cnf的[mysql]下添加image.png

2、服務器端命令

一、SQL語言規範

    數據庫中SQL語句不區分大小寫

    SQL語句能夠單行或多行書寫,以分號結尾

    關鍵詞不能跨多行或者簡寫

二、數據庫對象

(1)數據庫對象:數據庫、表、索引、視圖、用戶、存儲過程、函數、觸發器、事件調度器等

(2)命名規則:

必須以字母開頭

可包括數字和三個特殊字符(# _ $)

不要使用MySQL的保留字

同一database(Schema)下的對象不能同名

三、SQL語句分類

    (1)DDL: Data DefinationLanguage 數據定義語言

    CREATE,DROP,ALTER

    (2)DML: Data Manipulation Language數據操縱語言

    INSERT,DELETE,UPDATE

    (3)DCL:Data Control Language 數據控制語言

    GRANT,REVOKE,COMMIT,ROLLBACK

    (4)DQL:Data Query Language 數據查詢語言

    SELECT

四、數據類型

image.png

    show databases;                 顯示全部數據庫

    select user();                       顯示全部用戶

    use DBNAME                      切換數據庫

    quit                                      退出數據庫

    create database DBNAME  建立數據庫

    drop database name           直接刪除數據庫,不提醒

    show tables;                        顯示錶

    describe tablename;            顯示具體的表結構

    select 中加上distinct           去除重複字段

    show table status from DBNAME\G    查看某個數據庫的存儲引擎

    show create DBNAME/TBLNAME\G    查看數據庫或者表的存儲引擎

注:像對於數據庫增刪改操做都是須要慎重的操做,所以鏈接數據庫時,最好須要mysql -U鏈接,或者/etc/my.cnf.d/my-clients.cnf文件中[mysqld]下添加safe_upgrade,這樣系統對危險操做會提示或者拒絕

五、SQL語句演示

    (1)CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);

    創建students表,字段有id(id爲正整數,無符號,不能爲空而且設置爲主鍵)、姓名(可變字段長度爲20,不能爲空)、年齡(小整數型,無符號)

    (2)CREATE TABLE students2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));

    創建students2表,字段有id(id爲正整數,無符號,不能爲空)、姓名(可變字段長度爲20,不能爲空)、年齡(小整數型,無符號),主鍵設置爲複合主鍵(id,name)

    (3)ALTER TABLE students RENAME s1;

    修改表格名稱students爲s1

    (4)ALTER TABLE s1 ADD phone varchar(11) AFTER name; 

    修改表格s1,在name字段後添加phone字段,該字段爲可變長度字符型,11個字節

        注意:alter沒有before字段,若是插入的字段在首列,用FIRST

    (5)ALTER TABLE s1 MODIFY phone int;

    修改表格s1,更改phone字段數據類型爲正整數型

    (6)ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);

    修改表格s1,更改字段phone爲mobile,該字段爲固定長度字符型,11個字節長度上限

    (7)ALTER TABLE s1 DROP COLUMN mobile;

    修改表格s1,刪除mobile列

    (8)Drop TABLE 刪除表

    (9)ALTER TABLE students ADD gender ENUM('m','f')

    修改表格students,添加字段gender,取值只有m、f

    (10)ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;

    修改表格students,改變字段id爲sid,定義sid無符號,不爲空且爲主鍵

    (11)ALTER TABLE students ADD UNIQUE KEY(name);

    修改表格students,設置name字段爲惟一鍵

    (12)ALTER TABLE students ADD INDEX(age);

    修改表格students,設置索引字段爲age

    (13)DESC students;

    顯示學生表結構

    (14)SHOW INDEXES FROM students;

    顯示學生表的索引字段

    (15)ALTER TABLE students DROP age;

    刪除年齡字段

    (16)INSERT INTO students VALUES(1,'tom','m'),(2,'alice','f');

 (知道表結構只有id姓名性別這三個字段狀況下)插入學生表信息

    (17)INSERT INTO students(id,name) VALUES(3,'jack'),(4,'allen');

    根據學生表id、姓名,對應插入3 jack和4 allen

    (18)SELECT * FROM students WHERE id < 3;

    查詢id號小於3的學生表全部信息

    (19)SELECT * FROM students WHERE gender='m';

    查詢gender是m的學生表全部信息

    (20)SELECT * FROM students WHERE gender IS NULL;

    查詢gender爲空的學生表信息

    (21)SELECT * FROM students ORDER BY name DESC LIMIT 1,2;

    按name倒序排列,跳過第一個,查詢學生表跳事後的前兩條信息

    (22)SELECT * FROM students WHERE id >=2 and id <=4

    查詢id大於等於2,小於等於4的信息

    (23)SELECT * FROM students WHERE id in ('2','4')

    查詢id等於2或者4的信息

    (24)SELECT * FROM students WHERE id BETWEEN 2 AND 4

    查詢id位於2到4之間的信息

    (25)SELECT * FROM students WHERE name LIKE ‘t%’

    查詢字段name中以t開頭的內容

    (26)SELECT * FROM students WHERE name RLIKE '.*[lo].*';

    查詢字段name中包含l或者o的信息

    (27)SELECT id stuid,name as stuname FROM students

    查詢字段id、stuid、name(顯示結果以stuname)

注意:使用group by分組語句時,查詢的數據內容一般會將group by後的字段也一併加入select語句以後做爲查詢結果的區分,而且查詢語句中若是有判斷條件語句,分組前對結果的條件判斷依舊用where,分組後對結果的條件判斷用having,舉例

select ClassID,avg(Age),name from students where gender='f' group by ClassID having name like 'L%';

從學生表中查詢ClassID,avg(Age)、name字段,條件爲gender值爲f的記錄,並以ClassID爲單位進行分組,分組後的結果篩選出name記錄裏以L開頭的記錄

image.png

六、多表查詢

(1)交叉鏈接:笛卡爾乘積

(2)內鏈接:

等值鏈接:讓表之間的字段以「等值」創建鏈接關係;

不等值鏈接

天然鏈接:去掉重複列的等值鏈接

自鏈接

(3)外鏈接:

左外鏈接:

FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col

右外鏈接

FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col

image.png

七、視圖view

視圖:view,虛表,保存有實表的查詢結果,若是咱們常常用到一句很長的SQL語句,爲避免每次都輸入那麼長的語句,此時能夠創建視圖:create view VIEWNAME as SQLSENTENCE;等待下次引用就能夠select * from VIEWNAME;直接查詢。舉例說明create view view_students_score as select s.stuid as stu_id,s.name as stu_name,sc.score,c.course from students as s inner join scores sc on s.stuid=sc.stuid inner join courses c on sc.courseid=c.courseid;該語句建立學生成績表視圖,等下次再用該表時候用命令select * from view_students_score;便可

image.png

相關文章
相關標籤/搜索