mysql基礎一(純sql語句)

數據庫知識是每個開發人員必備的技能之一,但是真正花時間去了解的就比較少了,大部分都是可視化工具,簡單的sql語句,在工作中基本上夠用了,但是如果沒有可視化工具,你對自己有多少的信心呢?反正我是好多都記不住(一個完整的創建表的sql我都寫不下來,嗚嗚嗚),這一系列博客,就簡單介紹下我們傳統的SQL語句怎麼寫(主要也是增進一下自己對數據庫sql語句的認知)。所有的展示直接在虛擬機上進行了,安裝mysql的過程就不展示了(是不是比較懶,哈哈哈)

創建數據庫:

官方給的標準創建數據庫的sql語法:


CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

shcema和database是同義詞,都可以用來創建數據庫;如果db_name數據庫存在,你需要加上if not exists,不然會出錯,character set 指定數據庫編碼格式 

我們先來創建數據庫(創建數據庫並指定編碼格式爲utf8):

create database if not exists db_test default character set utf8;

 

有了數據庫我們就可以創建表了。

官方語法太多,貼出部分,感興趣的可以自行到官網查看:https://dev.mysql.com/doc/refman/5.6/en/create-table.html#create-table-name

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

我們來創建自己的測試表:

id int not null auto_increment primary key comment '主鍵'(列名:id,類型int,不能爲null,自動遞增,主鍵,註釋爲:主鍵)

create table if not exists t_test(id int not null auto_increment primary key comment '主鍵',name varchar(50) comment '姓名',age age tinyint comment '年齡');

有了表我們才能插入數據:

官方地址:https://dev.mysql.com/doc/refman/5.6/en/insert.html

我看網上有人說value和values執行順序有比較大的差別,value比較快,不知道可不可行,有想深入瞭解的就得自己找找資料了。

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    {VALUES | VALUE} (value_list) [, (value_list)] ...
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    SET assignment_list
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    SELECT ...
    [ON DUPLICATE KEY UPDATE assignment_list]

value:
    {expr | DEFAULT}

value_list:
    value [, value] ...

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

插入我們自己的數據:

insert into t_test(id,name,age) values(2,'wangwu',15) (3,'xiaohong',15);

有了數據,難道你不想看看這些數據在數據庫是否真正的成功了嗎?我們有select語句:

select * from t_test;

 我們多插入幾條數據之後(有重複的數據?現實中重名的也有啊,正常,哈哈):

 如何刪除數據?delete就行了:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

 刪除指定id的數據:

 delete from t_test where id = 2;

現在有個需求是:刪除姓名爲zhangsan並且年齡最大,如何辦?

有人說先把最大年齡查出來,再拿age做比較。這樣是可以做到,但是沒有發現多了一步操作嗎?

mysql> delete from t_test 
    -> where age = (select max(age) from t_test where name='zhangsan');

 當然還有別的方法,但是我說的是運用delete官方給的另一種方法。 我們可以仔細看下官方給的delete語句是什麼樣的?

order by...這不是排序嗎?limit row_count 這不是限定行數的嗎?是的,那麼上面那個需求我們可以怎麼做?

name爲zhangsan的,按照age從大到小排序,limit限定刪除1行,是不是也是可以的?

 delete from t_test where name='zhangsan' order by age desc limit 1;

 如何修改數據:

update語句:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

 我們先來來吧wangwu的年齡改爲20,修改多個字段英文的逗號(,)隔開就行

mysql> update t_test set age=20 where name='wangwu';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

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