接下來講講mysql的CRUD(增刪改查)
- 創建表
-- 創建訂單表
CREATE TABLE orders(
orderid INT PRIMARY KEY AUTO_INCREMENT,
userid INT NOT NULL,
ordertime DATETIME,
state INT,
total DECIMAL(12,2) 數據類型定義爲decimal的後面的參數(n,m)n代表最大有效位數,m代表數值精度
)
-- 創建商品表
CREATE TABLE goods (
gid INT PRIMARY KEY AUTO_INCREMENT,
goodsname VARCHAR(20) NOT NULL,
price DECIMAL(12,2) NOT NULL
)AUTO_INCREMENT = 1000 -- 定義主鍵的自增長初始值爲1000
-- 創建訂單明細
CREATE TABLE order_datails (
gid INT NOT NULL,
orderid INT NOT NULL,
`count` INT NOT NULL, -- count其實是mysql內部的一個關鍵字,所以在需要用到這個關鍵字做字段的時候是需要用``給引用起來。
price DECIMAL(12,2) NOT NULL,
PRIMARY KEY(gid,orderid) -- 確定聯合主鍵
)
-- 對已經創建好的表添加外鍵約束
ALTER TABLE order_datails ADD CONSTRAINT fk_gid FOREIGN KEY (gid) REFERENCES goods(gid);
ALTER TABLE order_datails ADD CONSTRAINT fk_oid FOREIGN KEY (orderid) REFERENCES orders(orderid);
- 在數據庫中新增Table完成後,接下來就是對錶中的數據進行初始化。
-- 對orders表的初始化操作
-- 不寫字段名
INSERT INTO orders VALUES (1,1,'2019-12-25 9:25:15',0,8000)
-- 選擇某幾個字段,
INSERT INTO orders (userid,ordertime,state,total) VALUES (2,'1999-12-20 23:20:15',0,1500)
INSERT INTO orders (userid,ordertime,state,total) VALUES (3,'1998-2-20',0,2500)
-- 在上面可以看到mysql的日期類型的直接可以通過字符串形式插入
--對goods表的操作
-- 插入goods表數據
insert into goods values(null,'iphoneX',5000.00)
INSERT INTO goods VALUES(NULL,'ipad2018',28000.00);
INSERT INTO goods VALUES(NULL,'oppoRealMe',1500.00);
INSERT INTO goods VALUES(NULL,'redMiK30Pro',2900.00);
INSERT INTO goods VALUES(NULL,'huweiMate30',5500.00);
--在此處的null值是因爲數據庫內部的id被設置成爲auto_increment,在插入數據的時候不定義新的值,數據庫將會自己給該字段賦值
--對orderdatials表的操作
-- 新增表內數據
INSERT INTO order_datails VALUES (1,1000,1,2800.00);
-- 批量增加表內數據
INSERT INTO order_datails VALUES (1,1001,1,1500.00),(2,1003,1,5500.00),(2,1002,1,2900.00);
-- 修改update
-- 帶條件的修改
UPDATE orders
SET total = 5000, state = 1, ordertime = '2001-10-01'
WHERE orderid = 2;
-- 不加條件的修改
-- 不帶條件的修改會導致該表的整個字段都被更新爲同一個值,適合批量修改爲同意數值的時候
UPDATE orders SET total = total + 2000;
UPDATE orders SET total = total *(0.9);
- 刪除,考慮到上面建的表中的數據不夠,接下來我給出一個有大量數據的初始化腳本來進行接下來的操作
-- 創建一個tb_user 表,並插入一些初始化的數據。這些事通過mysql圖形化界面工具直接導出來的sql腳本,雖然看上去會有些不一樣,但是整體的原則是一樣的。
/*Table structure for table `tb_user` */
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用戶名',
`password` varchar(32) NOT NULL COMMENT '密碼,加密存儲',
`phone` varchar(20) DEFAULT NULL COMMENT '註冊手機號',
`email` varchar(50) DEFAULT NULL COMMENT '註冊郵箱',
`created` datetime NOT NULL COMMENT '創建時間',
`updated` datetime NOT NULL,
`source_type` varchar(1) DEFAULT NULL COMMENT '會員來源:1:PC,2:H5,3:Android,4:IOS,5:WeChat',
`nick_name` varchar(50) DEFAULT NULL COMMENT '暱稱',
`name` varchar(50) DEFAULT NULL COMMENT '真實姓名',
`status` varchar(1) DEFAULT NULL COMMENT '使用狀態(Y正常 N非正常)',
`head_pic` varchar(150) DEFAULT NULL COMMENT '頭像地址',
`qq` varchar(20) DEFAULT NULL COMMENT 'QQ號碼',
`account_balance` decimal(10,0) DEFAULT NULL COMMENT '賬戶餘額',
`is_mobile_check` varchar(1) DEFAULT '0' COMMENT '手機是否驗證 (0否 1是)',
`is_email_check` varchar(1) DEFAULT '0' COMMENT '郵箱是否檢測(0否 1是)',
`sex` varchar(1) DEFAULT '0' COMMENT '性別,1男,2女',
`user_level` int(11) DEFAULT NULL COMMENT '會員等級',
`points` int(11) DEFAULT NULL COMMENT '積分',
`experience_value` int(11) DEFAULT NULL COMMENT '經驗值',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`last_login_time` datetime DEFAULT NULL COMMENT '最後登錄時間',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='用戶表';
/*Data for the table `tb_user` */
insert into `tb_user`(`id`,`username`,`password`,`phone`,`email`,`created`,`updated`,`source_type`,`nick_name`,`name`,`status`,`head_pic`,`qq`,`account_balance`,`is_mobile_check`,`is_email_check`,`sex`,`user_level`,`points`,`experience_value`,`birthday`,`last_login_time`) values
(1,'sunwukong','123123','1112221111',NULL,'2017-08-19 20:50:21','2017-08-19 20:50:21',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(2,'zhubajie','4297f44b13955235245b2497399d7a93','111122',NULL,'2017-08-19 21:00:23','2017-08-19 21:00:23',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(3,'shaheshang','96e79218965eb72c92a549dd5a330112','13900112222',NULL,'2017-08-19 22:37:44','2017-08-19 22:37:44',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(4,'zhangsan','00b7691d86d96aebd21dd9e138f90840','17701265258',NULL,'2017-08-19 23:44:45','2017-08-19 23:44:45',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(5,'lisi','8fbaad286e993d37b34b41749894b4a7','13401341444',NULL,'2017-08-20 11:08:29','2017-08-20 11:08:29',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(6,'wangwu','d41d8cd98f00b204e9800998ecf8427e','13601566766',NULL,'2017-08-20 11:09:26','2017-08-20 11:09:26',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(7,'zhaoliu','f379eaf3c831b04de153469d1bec345e','13669669966',NULL,'2017-08-20 12:09:27','2017-08-20 12:09:27',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(8,'lijialong','4297f44b13955235245b2497399d7a93','13260006290',NULL,'2017-08-20 12:23:37','2017-08-20 12:23:37',NULL,NULL,NULL,'1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(9,'tangseng','4297f44b13955235245b2497399d7a93','13901223232',NULL,'2017-10-07 23:07:42','2017-10-07 23:07:42',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(10,'niumowang','4297f44b13955235245b2497399d7a93','13900112222',NULL,'2017-10-07 23:46:53','2017-10-07 23:46:53',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(11,'honghaier','f14029217ff5e7a50cdc7e70f686cf29','13919991999',NULL,'2017-10-08 11:23:02','2017-10-08 11:23:02',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(12,'tieshanxian','f14029217ff5e7a50cdc7e70f686cf29','13999999999',NULL,'2017-10-08 12:10:26','2017-10-08 12:10:26',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(13,'nezha','1a100d2c0dab19c4430e7d73762b3423','17338118923',NULL,'2017-10-08 12:23:27','2017-10-08 12:23:27',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(14,'litianwang','b0baee9d279d34fa1dfd71aadb908c3f','17338118923',NULL,'2017-10-08 12:28:25','2017-10-08 12:28:25',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(15,'taiba','97d84aa49109e72a54980e79802844be','17338118923',NULL,'2017-10-08 12:34:53','2017-10-08 12:34:53',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-- 刪除表,但是自增的數據並不能回到初始值(刪除表內的元組數據,即用戶添加的表內數據)
DELETE FROM tb_user;
-- 刪除表的自增(我的理解是刪除表內的數據以及索引,並不刪除表結構)
TRUNCATE TABLE tb_user;
-- 徹底的刪除了整個表結構和表索引
DROP TABLE tb_address;
-- 刪除2019年後註冊的用戶
DELETE FROM tb_user WHERE created > '2019-1-1';
-- 刪除某個區間內的條件,可以用數學符號,也可以使用關鍵字between
DELETE FROM tb_user WHERE (created <= '2019-5-5' && created >= '2018-5-5');
DELETE FROM tb_user WHERE created BETWEEN '2018-5-5' AND '2019-5-5';
-- in在某個區間
DELETE FROM tb_user
WHERE id IN (10,13);
-- 空值處理
DELETE FROM tb_user WHERE email IS NULL;
DELETE FROM tb_user WHERE email IS NOT NULL;
關於delete、truncate、drop的具體區別可以參考這篇博文drop、truncate和delete的區別。裏面寫的很清楚。
- 查詢也分爲很多種:單列查詢,多列查詢
中間也涉及到別名操作,分頁,排序,去重複
-- 單列,多列,別名,排序,分頁,去重複
-- 查詢表數據
SELECT * FROM tb_user;
SELECT id,username,PASSWORD FROM tb_user;
-- 別名,爲created列換一個創建時間的別名(別名用於子查詢較多)
SELECT id, username,created AS 創建時間 FROM tb_user;
-- AS可用來起別名,可有可無
SELECT t.* FROM tb_user t;
-- 排序
SELECT id , title , price FROM tb_item; -- 默認對主鍵排序,
-- order by 默認升序排列asc
SELECT id ,title , price
FROM tb_item
ORDER BY price DESC; -- 設置爲降序排列
-- order by 還可多個字段排序,前提是在第一個條件相等時,按下一個規則
SELECT id ,title , price
FROM tb_item
ORDER BY price DESC ,id DESC;
-- 去重複
SELECT DISTINCT username FROM tb_user;
-- 分頁 900多頁
SELECT * FROM tb_item
LIMIT 0,10; -- 0表示起始下標,10表示顯示的條數
-- 第一個參數
-- 第二個參數
-- ((當前頁碼-1)*每頁大小,每頁大小)
學習還在繼續,還會繼續補充!。。。