mysql基礎操作

接下來講講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)*每頁大小,每頁大小)

學習還在繼續,還會繼續補充!。。。

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