數據庫知識是每個開發人員必備的技能之一,但是真正花時間去了解的就比較少了,大部分都是可視化工具,簡單的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