數據庫相關(1)

以MySql爲例

1.命令行操作

  練習SQL語句還是在命令行下實踐比較好

  安裝好MySql後,打開他自帶的命令行界面後,直接輸入密碼即可進入

  

/*
	 * 對庫的操作
	 */
	
	//查看已存在的數據庫,注意複數形勢:   
	show  databases;

	//創建數據庫,最好帶上編碼格式:          
	create database student character set utf8;

	//更改編碼格式:                                          
	alter database student character set utf8;

	//查看指定的某一個數據庫結構:              
	show create database student;

	//刪除某一個數據庫,最好帶上判斷:      
	drop database if exits student;

    /*
     * 對錶的操作
     */
	//對錶操作之前要聲明用哪個數據庫,直接是數據庫名,沒帶上database的聲明:     
	use student;       
	
	//創建一張表,圓括號,不是尖括號:     
	create table user(id int,name varchar(20),password varchar(8),birthday date);     

	//查看所有的表,若沒有,提示empty,複數形式:  
	show tables;        

	//查看指定的表結構:                                 
	show crate table user;             

	//給表加一列:                                             
	alter table student add age int;

	//修改某一字段的屬性:                             
	alter table student modify name varchar(30);

	//修改這一字段的名稱和屬性,被改的無需寫上長度屬性,改後的屬性要標明:                 
	alter table student change name username varchar(10);  

	//改變表的編碼:                                         
	alter table student character set gbk;

	//重命名錶:                                                  
	rename table student to students;

/*
	 * 亂碼問題
	 * 一般中文亂碼是由於數據庫client編碼和自己指定的編碼不一致導致的,若要中文需要GBK編碼
	 */
	//查看環境信息,注意 %
	show variables like 'character%';
	//更改環境裏的編碼
	set character_set_client=gbk;
	//還有顯示編碼也要一致
	set character_set_results = gbk;


/*
	 * 增
	 */
	//第一次插入需要寫入字段名稱,後續則不用
	insert into employee(id,username,gender,birthday,entry_date,job,salary,resume,image) values(1,'allen','male','1990-1-1','2010-1-1','CEO',9999.00,'someday','noday');
	
	insert into employee values(2,'lisi','male','1990-1-1','2010-1-1','CEO',9999.00,'someday','noday');
	//只插入部分還是需要寫入字段的
	insert into employee(id,username,gender,resume,image) values(3,'Kitty','female','someday','noday');
	//查看所有表元素
	select * from employee;



/*
	 * 改
	 */
	//修改某一列所有屬性值
	update employee set resume='n/a';
	//修改某一列的某一行屬性值
	update employee set resume='yes' where id=1;
	//更改某一行多個屬性值
	update employee set id=5,gender='femal' where username='allen';
	//數值項四則運算
	update employee set salary=salary+100 where id=2;

/*
	 * 刪除表中數據 delete,若不帶from來限定,則所有數據刪除,但是表結構(定義)還在
	 * 若要刪除表定義,請用drop table 
	 * 另truncate,是刪除表記錄,類似不帶from的delete
	 * 但是drop和truncate是DDL,自動提交,立即生效;delete是DML,可以回滾
	 */
	delete from employer where id=4;
	drop table employee;

另立了一個表


/*
	 * 查 前面用的 * 查所有
	 */
	//查某兩列
	select name,english from pupils;
	//過濾重複數據,多列時關鍵字distinct必須在首項,且必須多列都重複才過濾
	select distinct name,english from pupils;
	//查某一列並同時加上一個值
	select name,math+1 from pupils;
	//查詢時可將列的顯示位置變換,同時顯示每一行的數值之和
	select name,math,chinese,english,math+chinese+english from pupils;
	//別名顯示
	select name as '用戶名' from pupils;
	//範圍刷選,可以按照大於、小於號來,也可按照 in(可選值列表) 來定
	select name,math,english,chinese from pupils where english>70 and math<99;
	select name,math,english,chinese from pupils where math in(70,60,100);
	//模糊查詢,%
	select name,math,english,chinese from pupils where name like '李%';
	//排序,默認是升序,降序是order by desc
	select name,math,math+chinese+english from pupils order by math+chinese+english desc;

關於Null

若在插入時,輸入的內容爲空,則查詢時顯示的爲null,但這個不是真正的null,按照null爲關鍵字查詢時提示爲empty

只有在插入時 不輸入這一項,查詢時纔可以按null爲關鍵詞查詢





2.主鍵 & 外鍵 & 多表查詢

關於主鍵:

某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成爲一個主鍵比如:

 

學生表(學號,姓名,性別,班級)

其中每個學生的學號是唯一的,學號就是一個主鍵

 

用戶表(用戶名、密碼、登錄級別)

其中用戶名是唯一的, 用戶名就是一個主鍵


主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改與刪除


2.1 一對多

建一個省份表,主鍵是省份的id

建一個學生表,主鍵是學生id

每個省份id可以對應多個學生的籍貫省份信息

此時,有了主鍵後,插入數據時,主鍵不能爲空,而且不能重複。

/*
	 * 主鍵、外鍵
	 */
	create table province ( id int primary key,province varchar(9));
    create table student (id int primary key,name varchar(20),provinceid int);
    //插入數據時,各自的主鍵值不能重複且不能爲空
    insert into province values(1,'新疆維吾爾族自治區');
    insert into province values(2,'內蒙古自治區');
    //此時沒有外鍵,沒有和省份表關聯,省份id可以自由加
    insert into student values(1,'陳金旭',1);
    insert into student values(2,'田偉',2);
    insert into student values(3,'李陽',3);

但是這個時候兩張表沒有任何關係

以省份表爲學生表外鍵來源

此時學生表裏多了一個省份3,要刪掉才能添加外鍵,或者在省份表裏加一個ID=3

    //刪除掉外鍵裏沒有的id
    delete from student where id=3;
    /*
     * 添加外鍵
     * FK_provinceid是自定義的外鍵名
     * foreign key(province)表明這張表哪個字段需要關聯外鍵
     * province(id)表明是哪張表的哪個字段當做外鍵
     */
    alter table student add constraint FK_provinceid foreign key(province) references province(id);


此時要用別的省份,需要在省份表裏添加一個省份才行

//添加一個省份
    insert into province values(3,'黑龍江');
    //此時在學生表裏才能用到黑龍江
    insert into student values(3,'李陽',3);


2.2 多對多

師生對應關係,另建一個數據庫

每個老師可以對應多個學生,每個學生也有多個老師

建立老師表和學生表,定義主鍵

//學生表老師表
    create table teacher(id int primary key,Name varchar(10) not null);
    create table student(id int primary key,Name varchar(10) not null);
    
    //插入數據
    insert into student values (1, '江峯');
    insert into student values (2, '進旭');
    insert into student values (3, '熊吉');
    insert into student values (4, '蘇浪');
    insert into student values (5, '王丹');
    
    insert into teacher values (1, 'Chinese');
    insert into teacher values (2, 'math');
    insert into teacher values (3, 'english');
    insert into teacher values (4, 'physics');
    insert into teacher values (5, 'movie');

此時應該再建立一個表,將學生與老師的ID關係對應,並分別作爲學生表、老師表的外鍵

//外鍵對應表
    create table course(T_ID int,S_ID int);
    //分別作爲外鍵
    alter table course add constraint FK_courseT_ID foreign key (T_ID) references teacher(id);
    alter table course add constraint FK_courseS_ID foreign key (S_ID) references student(id); 


建立對應關係,只需在外鍵表裏插入數據即可
//給外建表插入數據
    insert into course values(1,1);
    insert into course values(3,1);
    insert into course values(5,1);
    insert into course values(4,4);
    insert into course values(1,5);
    insert into course values(3,5);
    insert into course values(5,4);
    insert into course values(4,5);
    insert into course values(5,5);

可以看到對應關係


1號學生對應着1、3、4號老師,以此類推


2.3 一對一關係

夫妻關係

/*
     * 一對一
     */
    create table husband (id int primary key,name varchar(10));
    create table wife (id int primary key,name varchar(10));
    //給wife增加一個husbandid字段,作爲關聯
    //並且這個值應該是唯一的,否則可以出現多個wife嫁給同一個husband的情況,wife表插入時husbandid可以相同
    alter table wife add husbandid int;
    alter table wife add constraint FK_wife_husbandid foreign key(husbandid) references husband(id);
    alter table wife modify husbandid int unique;

正常的寫法,另外也可以通過外鍵關聯來實現,因爲主鍵本身就是唯一的

/*
     * 正常寫法
     */
    create table PERSON(ID int primary key,NAME varchar(100));
    create table computer(ID int primary key,brand varchar(20),
    		 PERSON_ID int unique,constraint FK_PERSON_ID foreign key(PERSON_ID) references PERSON(ID));
    //也可以通過外鍵關聯
    create table computer(ID int primary key,brand varchar(20),
    		constraint FK_PERSON_ID foreign key(ID) references PERSON(ID)



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