天天看點

MySql個人總結

Mysql是一個關系型資料庫管理系統,主要是用來管理資料庫的。
	mysql
		一個mysql下面有多個資料庫
			一個資料庫下面一般有多個表
				一張表内我們會存儲多條資料

為什麼要用mysql:
1:成本低
2:開源
3:體積小
4:運作快
綜上所說,mysql适用于中小型企業。

sql:結構化查詢語言,專門為了資料庫設計的一門語言,主要用于資料庫資料存儲,所有的關系型資料庫會遵守這個标準。
關系型資料庫:	遵守sql标準的資料庫
非關系型資料庫:	不遵守sql标準的資料庫(noSQL)

SQL的分類:
	1:資料庫查詢語言DQL(查詢資料使用)
	2:資料定義語言DDL(負責資料結構的定義與删除)
	3:資料操縱語言DML(主要針對資料的增,删,改)
	4:資料控制語言DCL(主要用于資料庫的權限控制)
	5:指針控制語言CCL
	6:事務處理語言TPL

mysql 的登入:
mysq -hip位址 -u賬号 -p

mysql 的退出:
exit
quit

如何展示已有資料庫:
show databases;
如何建立資料庫:
create database 資料庫名稱;
如何删除資料庫:
drop database	資料庫名稱;

#CREATE 	代表建立的意思
#TABLE 		代表表的意思
#`user`		是我們自定義的表名
# id,name age sex 是我們自定義的列名,名稱一般要求見名之意
# int,varchar,CHAR是mysql提供的資料類型,并且需要制定長度
# varchar(20)	代表可以存放20個字元,無論中英文都可以,varchar的存儲最大大小是65532位元組,我們習慣使用的字元編碼
# 是utf-8,一個漢字3個位元組,雖然在建立表的時候我們指定了varchar的長度,但是varchar會根據插入資料的時候,資料的大小
# 來自動進行空間的配置設定(不會超過一開始指定的空間)
# int(3)	按照常理來說,這是代表可以存儲長度3位的資料,但是mysql中的長度限制對int無效,這就代表int後面的長度可以
# 不指定
# char(1)	代表裡面可以存放1個字元, char(20) 代表裡面可以存放20個字元,char在聲明之後無論裡面存放了多少資料,占據
# 的都是一開始指定的空間
CREATE TABLE user(
id int,
name varchar(20),
age int,
sex char(1)
);
# 檢視表結構	desc 描述 
DESC user;

#删除表

DROP TABLE user;

# 對于已經存在的表,需要增加裡面的列的時候可以使用 ALTER ADD,多個ADD需要使用,分割
ALTER TABLE user ADD height int, ADD A varchar(20);
# 對于已經存在的表,需要删除裡面的列可以使用 ALTER DROP COLUMN
ALTER TABLE user DROP COLUMN height, DROP COLUMN A;
建立一個表,名稱叫cat,屬性有 id,name,color,age,sex,建立完成後檢視表結構,然後删除表

建立一個表,名叫Dog,屬性有id,name,color,age,sex,建立完成後檢視表結構,然後删除表

# 最基本的查詢
# SELECT	代表查詢的意思
#	*				代表的是全部的列
# FROM 		代表從哪裡查詢	
# `user`	代表我們需要查詢的表
SELECT * FROM user;

# 如果隻想查詢ID 隻需要将* 替換成ID
SELECT ID FROM user;
# 如果隻想查詢ID,NAME 隻需要将* 替換成ID NAME
SELECT ID,NAME FROM user;

# MYSQL 中插入資料有三種方式
# 第一種,按照所有列的順序來插入全部的值
insert into user values(1,'王五',19,'女');
# 第二種,按照指定的列來插入指定的值,在表名後面使用(列名...)來告訴資料庫 values裡面的值都放在哪些列中。
insert into user (id,name) values(2,'趙六');
#	mysql資料翻倍, 就是将查詢出來的内容,自動添加到表中(一般用于測試)
insert user SELECT * FROM user;

# 修改 
# update 	代表修改的意思
# set 		代表設定的意思, 後面跟上需要設定的屬性,以及需要設定的值,多個屬性 值需要用,分割
# WHERE 	代表條件,隻有符合條件的資料才會進行修改
UPDATE USER SET name='哈哈',age=110 WHERE id=100

# 删除
# 第一種	按照指定的條件進行删除指定的行
DELETE FROM USER WHERE id=1

# 第二種	直接删掉表中所有資料(不能有條件)
TRUNCATE TABLE USER;

#	第三種	直接删掉表以及資料
DROP TABLE USER;




CREATE TABLE `emp` (
  `EMPNO` int(4) NOT NULL,
  `ENAME` varchar(10),
  `JOB` varchar(9),
  `MGR` int(4),
  `HIREDATE` date,
  `SAL` decimal(7,2),
  `COMM` decimal(7,2),
  `DEPTNO` int(2)
);
CREATE TABLE `dept` (
  `DEPTNO` int(2) NOT NULL,
  `DNAME` varchar(14) DEFAULT NULL,
  `LOC` varchar(13) DEFAULT NULL
);




CREATE TABLE `salgrade` (
  `GRADE` int(11) NOT NULL,
  `LOSAL` int(10) DEFAULT NULL,
  `HISAL` int(10) DEFAULT NULL,
  PRIMARY KEY (`GRADE`)
);
INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');




INSERT INTO `salgrade` VALUES ('1', '700', '1200');
INSERT INTO `salgrade` VALUES ('2', '1201', '1400');
INSERT INTO `salgrade` VALUES ('3', '1401', '2000');
INSERT INTO `salgrade` VALUES ('4', '2001', '3000');
INSERT INTO `salgrade` VALUES ('5', '3001', '9999');




INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800.00', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600.00', '300.00', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250.00', '500.00', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975.00', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250.00', '1400.00', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850.00', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450.00', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-07-13', '3000.00', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000.00', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500.00', '0.00', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-07-13', '1100.00', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950.00', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000.00', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300.00', null, '10');


-- mysql 中的限制(主要是用來限制表中的資料)
-- 	唯一限制		用來限制此列的值不能重複
#		非空限制		用來限制此列的值不能為null
#		主鍵限制		唯一+非空限制
#		外鍵限制		主要用于發生了父子關系的表中,限制的是子表的添加(子表中外鍵的資料,在父表中必須存在),以及父表的删除
#		檢查限制		mysql中存在,但是不好使。
#			(預設限制)
#			(自增限制)		

#mysql中使用限制的兩種方式,1:在建立表的時候使用  	2:将限制添加到已經建立好的表中
# 使用第一種方式建立一張表 要求 id 是主鍵	 name 不能是空	sex 預設是男	電話号 要唯一
CREATE TABLE user(
id int PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR(1) DEFAULT '男',
phone VARCHAR(11)	UNIQUE
)

INSERT INTO USER VALUES(2,'李四',DEFAULT,'120');

SELECT * FROM USER
# 使用第二種方式給表添加限制 要求 id 是主鍵	 name 不能是空	sex 預設是男	電話号 要唯一
CREATE TABLE ST(
ID INT,
NAME VARCHAR(20),
SEX CHAR(1),
PHONE VARCHAR(11)
)
-- 添加限制的關鍵字,還是alter
ALTER TABLE st ADD PRIMARY KEY(ID);
-- 非空限制是行級限制,是以隻能通過修改列來完成
ALTER TABLE st MODIFY NAME VARCHAR(20) NOT NULL;
--  給 PHONE列添加一個唯一限制,并給限制起了個名字,友善根據異常尋找  CONSTRAINT設定名字時用的關鍵字
ALTER TABLE st ADD CONSTRAINT uk_phone UNIQUE KEY(PHONE);
--  将sex設定成預設男。
ALTER TABLE st MODIFY SEX CHAR(1) DEFAULT '男';
添加列
alter table 類名  add height int

insert into st values(1,'張三','男','123');
insert into st values(2,'李四','男','123');

-- 使用自增來讓mysql自己來維護主鍵。
DROP table user;
CREATE TABLE user(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) NOT NULL,
sex CHAR(1) DEFAULT '男',
phone VARCHAR(11)	UNIQUE
)


INSERT INTO USER VALUES(NULL,'李四',DEFAULT,'124');

-- 使用第二種方式為已經存在的表增加自增。
ALTER TABLE ST MODIFY ID INT(10) auto_increment

-- 外鍵的使用
CREATE TABLE dept2(
deptno int PRIMARY KEY auto_increment,
dname VARCHAR(20) NOT NULL,
LOC  VARCHAR(20) UNIQUE
)

CREATE TABLE EMP2(
EMPNO	INT PRIMARY KEY AUTO_INCREMENT,
ENAME VARCHAR(20),
DEPTNO INT,
FOREIGN KEY(DEPTNO) REFERENCES DEPT2(deptno)
)


insert into dept2 values(1,'開發','杭州');
insert into emp2 values(1,'張三',1);
-- 不能直接删除父表的内容,要先删除掉相關聯的員工,然後再去删除掉部門。
DELETE FROM EMP2
DELETE FROM DEPT2


-- ****************查詢主要分為三部分組成*******************
-- 我們查詢出來的結果集稱之為集合的投影。
select EMPNO,JOB from emp where  empno=7369
-- 第一部分SELECT 	 表示查詢的意思,在後面需要跟上我們查詢的列名,可以使用*來表示所有列

-- 第二部分 FROM 	 	用于指定在哪些表中進行查詢,這個表可以是一個集合的投影(集合投影需要起個名字)。
SELECT * FROM (select EMPNO,JOB from emp where  empno=7369)  e  

-- 第三部分 WHERE		用于查詢條件,來進行資料的過濾。

-- 别名,我們可以給列,表起一些别名,更友善我們去記,在列名或表名之後使用AS 别名即可,AS可以省略不寫。
 
select EMPNO AS '員工姓名',JOB '職位' from emp where  empno=7369

-- 對于我們查詢出來的列,可以進行一些數值運算,以及函數操作
SELECT ENAME,SAL*2 FROM EMP

-- 查詢所有員工的年薪(13薪)
SELECT *,SAL*13 FROM EMP

--  DISTINCT 可以去重  查出員工職位有哪些
SELECT DISTINCT JOB FROM EMP
-- 資料庫中>,<,=,>=,<=,!=,<>都是存在的
-- 查詢工資大于1000的員工所有資訊
SELECT * FROM EMP WHERE SAL>1000
-- 查詢工資小于等于1000的員工所有資訊
SELECT * FROM EMP WHERE SAL<=1000
--  查詢工資不等于1600的員工
SELECT * FROM EMP WHERE SAL!=1600
SELECT * FROM EMP WHERE SAL<>1600
--  查詢沒有獎金的員工所有資訊 空不能使用=判斷,必須使用 is null,
#		AND 相當于Java中的&&用于多條件并行, OR 相當于Java中的|| 用于多條件選一
SELECT * FROM EMP WHERE COMM IS NULL OR COMM=0
--   查詢獎金不等于null 的員工   不等于null 必須要使用 IS NOT NULL
SELECT * FROM EMP WHERE COMM IS NOT NULL

           

繼續閱讀