二級Mysql語句

數據庫連接

mysql -u['username'] -p['password']

數據庫退出

exit

數據庫操作

創建:create database test(數據庫名)  DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

修改:alter database test

      deafault character set gb2312 (修改默認字符集爲gb2312)

      deafalut collate gb2312_chinese_ci; (修改默認校對規則爲gb2312_chinese_ci)

刪除:drop database test;

查看:show databases [like 'test'];

          select database();查看當前使用的數據庫

使用數據庫:use test  (不用分號)

 

表操作

創建:create table students

          (id char(10) not null primary key,

           name char(6) not null ,

           sex char(2) not null default 0,

            major char(20 not null));---列名 數據類型 約束

更新:alter table test.student

      add column city char(20) default null       (添加列)

      change column  city home char(20) not null  (可同時修改表中指定列的名稱和數據類型)

      modify column id int first/after             (修改指定列的數據類型,first/after修改指定列在表中的位置)

      alter column city set default '廣州';        (可修改或刪除表中指定列的默認值)

      drop column city;                           (刪除列)

      rename to test.university_student;           (爲表student重命名爲university_student)

重命名:rename table test.university_student to student;

複製:create table test.student_copy like test.student;    (複製表結構)

        create table test.student_copy as test.student;      (複製表結構和內容,但是索引和完整性約束不會被複制)

刪除:drop table test.student;

查看:show tables;                  (查看當前數據庫的所有表名稱)

      show columns from student; | desc 表名;    (查看錶結構)

插入數據:insert into test.student values('001','lwk','0','計算科學');

刪除數據:delete from test.student where id='001';    (不指定where將刪除所有數據)

修改數據:updata test.student set id='002' where name='lwk';

 

數據庫的查詢

查詢表達式結果:select 2+3;  (可得到2+3的計算結果5 注:select 'c'+'d';輸出0)

查詢表數據:select id,name from student;

替換查詢結果數據: select sex,

                   case

                       when sex='0'then '男'

                       else '女'

                   end [as '性別']             (as '性別'是給列sex取列別名)

                   from test.student;          (注意這裏還是一個select…from…子句)

高級查詢和sqlserver一樣(嵌套查詢和join連接)

嵌套查詢:select 城市 from lwk.倉庫  where 倉庫號 in (select 倉庫號 from lwk.職工 where 工資>5000)

join連接:select 供應商名 from lwk.供應商 join lwk.訂購單 on 供應商.供應商號=訂購單.供應商號 join lwk.職工 on 職工.職工號=訂購單.職工號 join lwk.倉庫 on 倉庫.倉庫號=職工.倉庫號 where 地址='韶關' and 城市='廣州'

 

字符串、文本匹配

通配符匹配:select name from student where major like('計%')                                  (%代表多個字符 _代表一個字符)

正則表達式匹配:select name from student where major [not] regexp|rlike '計';            (基本字符匹配,與百分號通配符效果類似)

                select name from student where id [not] regexp|rlike '計算科學|信息計算';     (選擇匹配)

                select name from student where major [not] regexp|rlike '[1-9]';                   (範圍匹配)

 

group by …having…子句

select major ,cout(*) 總人數 from student group by student.major having cout(*)>2;

 

order by 子句 (asc升序|desc降序)

asc和desc不能影響到逗號外的列,默認是asc

select * from app_public_feedback order by created_on desc limit 0,10;

 

limit 子句

select id,name from student limit 2,4;                    (從第3行開始取4行數據)

select id,name from student limit 4 offset 2;             (從第3行開始取4行數據)

 

視圖

創建:create view test.id_view as select id from student where sex='0';

修改:alter view test.name_view as select name from student where sex='0';

查看:show create view name_view;

更新:update/delete/insert(和表的使用方法類似,把表名改成視圖名就好)

      如果視圖包含 聚合函數 distinct關鍵字 group by子句 having子句 union運算符        位於選擇列表中的子查詢    from子句中的不可更新視圖或包含多個表 where子句中的子查詢,引用from子句中的表 時視圖不可更新

刪除:drop view name_view;

 

觸發器

創建:create trigger test.student_trigger <before|after> <insert| updata| delete> on test.student for each row <主體>  (主體如果要執行多個語句,要使用begin…end複合結構)

      例如:create trigger test.student_insert after insert on test.student for each row set @str='add a new student';

刪除:drop trigger [if exists] test.student_insert;

當觸發器涉及對錶自身的更新操作時,只能使用before觸發器。

old表中的值全部是隻讀的。(new操作後的表,old操作前的表)

load data語句能激活before insert觸發器。

每個表最多有六個觸發器,每種各一個。每個表每個事件每次只允許一個觸發器。

觸發器不能建立在視圖上。

 

事件   

InnoDB : 事物型數據庫首選引擎

需要確保MySQL中的event_scheduler已開啓

(查看當前事件調度器是否開啓 show variables like 'event_scheduler';|select @@event_scheduler;

    開啓|關閉事件調度器            set global event_scheduler=true|false;)

創建:create event event_name

      on scheduler every 1 month|year|quarter|day|hour|minute|……

      do

      insert into student values('002','路人甲',default,'君子修養');

修改:allter event event_name [rename to event_newname][do <事件主體> ][disable|enable(關閉|開啓事件)];

刪除:drop event event_name;

事件是基於特定時間週期來觸發的

如果不顯式地指明,事件在創建後處於關閉狀態 

 

存儲過程

創建:create procedure name ([過程參數])<過程體>

     過程體一般寫在begin……end之間

     過程參數格式: [in|out|inout] <全局參數名><類型>

       IN 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,爲默認值

       OUT 輸出參數:該值可在存儲過程內部被改變,並可返回

       INOUT 輸入輸出參數:調用時指定,並且可被改變和返回

需要具有create routine權限。

過程體:delimiter $$             (修改命令結束符爲$$)

        declare <變量名> <類型> [default <默認值>]  (聲明局部變量,局部變量只能在存儲過程體begin…end語句中聲明並作用)

        局部變量與用戶變量的區別:局部變量的聲明時沒有使用@符號,並且只能在begin…end範圍內使用;用戶變量在聲明時需要使用@符,已經聲明的變量存在與整個會話中。用戶變量使用SET語句定義,局部變量使用DECLARE語句定義。

     變量聲明後可使用set語句爲局部變量賦值 (set xname='小馬')

 

調用:call <存儲過程名>[<參數>]

修改:alter procedure <過程名> [<特徵>]

刪除:drop procedure <過程名>

查看:show create procedure <存儲過程>

           show procedure status(查看數據庫中存在哪些存儲過程)

 

遊標

聲明:declare <遊標名> cursor for <select語句>

打開:open <遊標名>

讀取數據:fetch <遊標名> into <變量1>[,變量2,…]

關閉:close <遊標名>

注意:!遊標只能用於存儲過程和存儲函數

          !遊標不是一條select語句,是被select語句檢索出來的結果集

 

存儲函數

創建:create function <函數名>[參數1 類型1]

      returns <類型>

      <函數主體>

調用:select <存儲函數名>[參數1]

刪除:drop function<存儲函數名>

查看:show create function <函數名>

           show function status(查看數據庫中存在哪些存儲過程)

 

用戶賬號管理

創建:create user 'luo' [@'localhost'] identified by 'mima';(默認主機名是@'%')

刪除:delete from user where User='myuser' and Host='localhost';

修改用戶賬號:rename 'luo'[@'localhost'] to 'he' [@'localhost'];(語句前he賬戶不存在)

修改用戶口令:select password('mima');                          (單向加密函數)

              set password for 'he'[@'localhost']=' *98703F7A543944FD3818077669F74D60616DB2C8';

查看所有賬戶:select user from mysql.user;

 

用戶權限管理

授與:grant all/updata…權限類型 on test.*/test.表名 (*.*代表所有數據庫的所有表) to 'he'[@'localhost'];

  末尾加上 with grant option--該賬戶可將自身權限授予其他賬戶

  末尾加上 with max_updates_per_hour number等格式 --限制update次數爲number

撤銷:revoke updata…權限類型 on test.* from 'he'[@'localhost'];

      revoke all privileges,grant option from user 'he';

查看用戶擁有的權限:show grants for 'he'[@'localhost'];

 

注意:授權包括:創建表、索引、列、視圖、存儲過程、函數等權限,最小的是列。

           DELETE 不能授予到操作權限。

 

備份與恢復

SQL語句備份:select *from test.表名 into outfile 'E:\data.txt'

             fields                    (fields子句有下面三個亞子句)

             terminated by ','          (指定字段間逗號分隔)

             optionally enclosed by '"' (指定字符用雙引號標註)

             lines terminated by '?';   (指定行末用問號結束)

 

SQL語句恢復:load data infile 'E:\data.txt' into test.表名

             fields                   

             terminated by ','         

             optionally enclosed by '"'

             lines terminated by '?';   (表結構要相同,恢復的只是數據,結果如果破壞要重新構建結構)

 

mysqldump程序備份:

導出:

mysqldump -uroot -ppassword db_name > /root/backup/db_name.sql

導入:

mysql -uroot -ppassword db_name < /root/backup/db_name.sql

參考:https://www.cmsky.com/mysqldump/

複製到本地:scp /root/backup/db_name.sql [email protected]:/home/ion/

刪除已複製得數據庫文件:rm -rf /root/backup/db_name.sql

重啓數據庫:

service mysqld restart 
service mysql restart (5.5.7版本命令)


 

下面的是恢復備份是全庫備份,使用情況較少。

              mysqldump -h (主機名) -u(賬戶名) -p(密碼)  數據庫名.表名/--database 數據庫名/--all-databases >目錄位置(保存文件後綴爲sql)

              例子:mysqldump -uroot -p123456 --all-databases>E:\360Downloads;

 

mysqldump程序恢復:

              mysqldump -h (主機名) -u(賬戶名) -p(密碼) --replace  數據庫名 目錄位置

 

PHP數據庫操作

建立連接 :   mysql_connect("服務器名","用戶名","密碼")

                   mysql_pconnect("服務器名","用戶名","密碼")

選擇數據庫:mysql_select_db("database_name"[,connection])

執行數據庫操作: mysql_query(query,[connection])   query可爲字符串或者字符串變量

數據的查詢:mysql_fetch_array(data[,datatype])

                     mysql_fetch_row(data)

                     mysql_fetch_assoc(data)

                     mysql_fetch_seek(data)

關閉連接:mysql_close()

 

@$_POST["b"]==添加、修改 or other

 

PHP 5 及以上版本建議使用mysqli代替mysql來進行數據庫操作。 :如  mysql_fetch_row(data)改爲mysqli_fetch_row(data)

 

配置允許其他電腦連接數據庫:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 

註釋掉   bind-address = 127.0.0.1

登錄數據庫

mysql -u['username'] -p['password']

使用命令:

grant all on *.* to ['username'] @'['host'] ' identified by ['password'];

例子:grant all on *.* to root @172.20.0.150 ' identified by '123456';

主機:172.20.0.150         賬戶:root          密碼:123456

刷新權限並重啓mysql:

flush privileges;

/etc/init.d/mysql restart
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章