數(shù)據(jù)庫:存放數(shù)據(jù)的倉庫皆疹;
硬盤? 運行內(nèi)存
mysql 現(xiàn)在被oracle收購了
oracle? oracle公司
sqlServer 微軟的
一般都是關(guān)系型數(shù)據(jù)庫管理軟件
mysql(數(shù)據(jù)庫管理軟件)--數(shù)據(jù)庫--表---行
sql語言:structured query language? 結(jié)構(gòu)化查詢語言
我們學(xué)的是標準sql? ,sql的方言被各個數(shù)據(jù)庫軟件單獨使用;
1.登錄mysql數(shù)據(jù)庫:
方式1:mysql -uroot -proot
方式2:
C:\Users\Administrator>mysql -uroot -p
Enter password: ****
退出數(shù)據(jù)庫:quit;? 或者exit;
2.查看所有數(shù)據(jù)庫:mysql> show databases;
3.選擇要使用的數(shù)據(jù)庫:mysql> use 數(shù)據(jù)庫名;
4.查看所有表:mysql> show tables;
5.創(chuàng)建數(shù)據(jù)庫:mysql> create database; 新數(shù)據(jù)庫名;
6.刪除數(shù)據(jù)庫:mysql> drop database; 被刪除的數(shù)據(jù)庫名;
7.新建一個表:mysql> create table student(sid int,sname varchar(10));
8.查看表結(jié)構(gòu):mysql> desc student;
數(shù)據(jù)類型:
文本:
char(10):固定長度的字符串; char(10);開辟10個字符的內(nèi)存空間鹉究;
varchar(n):可變長度的字符串,最多可以存n個字符,若實際存的不到n個那么就只開辟實際存儲的個數(shù)的大小刑枝;
n的最大值為255;
要用引號引起來
數(shù)字:
int:整數(shù)迅腔;
float(m,n):單精度小數(shù),m表示總共有多少位装畅,n表示小數(shù)有幾位;
double(m,n):雙精度小數(shù),m表示總共有多少位沧烈,n表示小數(shù)有幾位掠兄;
decimal(m,n):比double更精確,m表示總共有多少位锌雀,n表示小數(shù)有幾位徽千;
日期:
date:日期。格式:YYYY-MM-DD? 注釋:支持的范圍是從 '1000-01-01' 到 '9999-12-31'
所有的日期都用引號引起來
DATETIME:*日期和時間的組合汤锨。格式:YYYY-MM-DD HH:MM:SS
注釋:支持的范圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
創(chuàng)建表格:
mysql> create table student2(sid int ,sname varchar(10),birthday date,
-> score double(5,2));
Query OK, 0 rows affected (0.01 sec)
插入數(shù)據(jù):mysql> insert into student2 (sid,sname,birthday,score) values(1001,'tom','2000-01-11',99.99);
查看表中的所有數(shù)據(jù):mysql> select * from student2;
+------+-------+------------+-------+
| sid? | sname | birthday? | score |
+------+-------+------------+-------+
| 1001 | tom? | 2000-01-11 | 99.99 |
| 1001 | bob? | 2000-01-11 | 99.99 |
| 1001 | lucy? | 2000-01-11 | 99.99 |
+------+-------+------------+-------+
3 rows in set (0.00 sec)
mysql Day2
設(shè)置命令行顯示時的編碼格式:
命令行窗口是windows自帶的,它的編碼是gbk;
執(zhí)行set names gbk;告訴mysql把數(shù)據(jù)顯示到命令行的時候用gbk顯示百框;
這個語句在命令行關(guān)閉后失效闲礼,下次重新設(shè)置;
一铐维、對表結(jié)構(gòu)的操作:
1.增加一個字段
語法:alter table 表名? add? column 新字段名 字段類型柬泽;
mysql> alter table student2 add column sex varchar(10);
2.修改一個字段
語法: alter table? 表名 modify 列名? 新數(shù)據(jù)類型;
mysql> alter table student2 modify sex int;
3.更改字段名
語法:alter table 表名 change 原列名? 新列名? 數(shù)據(jù)類型嫁蛇;
mysql> alter table student2 change? sex gender varchar(10) ;
4. 刪除表的字段
語法: alter table? 表名 drop? 列名锨并;
mysql> alter table student2 drop gender;
5.重命名表
語法:alter table? 表名 rename to 新表名;
mysql> alter table student2 rename to stu;
6.復(fù)制表
6.1復(fù)制表結(jié)構(gòu)及數(shù)據(jù)
語法:create table 新表 select * from? 舊表;
mysql> update student set sal=120 where sal is null;
mysql> select * from student;
6.2 只復(fù)制表結(jié)構(gòu)
語法:create table 新表 select * from? 舊表? where? 1=0睬棚;
mysql> create table stu3 select * from stu where 1>9;
7.刪除表
語法: drop table? 表名;
mysql> drop table student;
8.索引:查詢快第煮,增刪慢;不可濫用抑党;
創(chuàng)建索引:
語法:create index 索引名? on 表名(字段名);
mysql> create index? my_index1 on stu2(sname);
查看索引:
mysql> show index from stu2;
刪除索引:
mysql> drop index my_index1 on stu2;
二包警、mysql約束:
1.非空約束? not null:限制某一列的值不能為null;
方式1:在建表語句中字段類型的后面加上 not null;
mysql> create table emp2(empno int ,ename varchar(10) not null );
方式2:
mysql> alter table emp2 modify empno int not null;
刪除非空約束:
mysql> alter table emp2 modify empno int null;
2.默認值 default:給某一列設(shè)置默認值;
默認情況下的默認值為null;
方式1:
mysql> alter table emp modify empno int default 0;
方式2:在建表語句中字段類型的后面加上 default 默認值;
mysql> create table emp2(empno int ,ename varchar(10) default '張三');
mysql> alter table emp2 modify ename varchar(10) default null;
3.唯一約束 unique:限制列里面的值不能重復(fù)底靠;
方式1:
mysql> alter table emp2 modify empno int? unique;
方式2:在建表語句中字段類型的后面加上 unique
mysql> create table emp3(empno int unique);
方式3:自定義名字的
mysql> alter table emp3 add constraint my_unique unique(empno);
刪除唯一約束:
語法:alter? table 表名? drop index 唯一約束的索引名(默認為所在的字段名);
mysql> alter? table emp3? drop index empno;
4.主鍵約束 primary key(非空+唯一)
方式1:
mysql> alter table emp modify empno int primary key;
方式2:在建表語句中字段類型的后面加上 primary key害晦;
mysql> create table emp10(empno int primary key,ename varchar(10));
方式3:自定義名字的
mysql> create table emp11(empno int ,ename char(10),constraint my_key primary key(empno));
刪除主鍵約束:
方式1:mysql> alter table emp11 drop primary key;
5.主鍵自增長auto_increment
方式1:在建表語句中字段類型的后面加上 primary key auto_increment;
方式2:mysql> alter table? emp12 modify empno int primary key auto_increment;
刪除自增長: alter table emp modify empno int;
6.外鍵約束 foreign key 不可濫用
方式1:
alter table 表名 add constraint 自定義外鍵名 foreign key(本表字段)? references 被參考的表名(被參考的字段);
mysql> alter table emp add constraint fk_deptno foreign key(deptno)? references dept(deptno);
方式2:
在建表語句最后一個字段的后面 constraint 自定義外鍵名 foreign key(本表字段)? references 被參考的表名(被參考的字段)
刪除外鍵:
語法:alter table emp drop foreign 外鍵名;
mysql> alter table emp drop foreign key fk_deptno;
mysql Day2 作業(yè):
1.創(chuàng)建學(xué)生表student:學(xué)生編號sid 主鍵自增長,姓名sname 非空暑中,性別sex? 非空壹瘟,生日birthday 鲫剿,年齡age ,班級編號cid ;
mysql> create table student(sid int primary key auto_increment,sname varchar(10)
not null,sex varchar(10) not null,birthday date,age int,cid int);
Query OK, 0 rows affected (0.03 sec)
這是學(xué)生表student:
+----------+-------------+------+-----+---------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default | Extra? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? |? ? ? ? ? ? ? ? |
| sex? ? ? | varchar(10) | NO? |? ? |? ? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| age? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
2.創(chuàng)建班級表class: 班級編號 cid 主鍵 ,班級名稱cname 非空稻轨;
mysql> create table class(cid int primary key,cname varchar(10) not null);
Query OK, 0 rows affected (0.01 sec)
mysql> desc class;
+-------+-------------+------+-----+---------+-------+
| Field | Type? ? ? ? | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| cid? | int(11)? ? | NO? | PRI |? ? ? ? |? ? ? |
| cname | varchar(10) | NO? |? ? |? ? ? ? |? ? ? |
+-------+-------------+------+-----+---------+-------+
3.給學(xué)生表添加一個字段:住址address;
mysql> alter table student add column address varchar(10);
Query OK, 0 rows affected (0.09 sec)
Records: 0? Duplicates: 0? Warnings: 0
這是增加的字段address:
mysql> desc student;
+----------+-------------+------+-----+---------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default | Extra? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? |? ? ? ? ? ? ? ? |
| sex? ? ? | varchar(10) | NO? |? ? |? ? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| age? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)
4.修改學(xué)生表性別字段為gender;
mysql> alter table student change sex gender varchar(10);
Query OK, 0 rows affected (0.02 sec)
Records: 0? Duplicates: 0? Warnings: 0
修改后的student表:
mysql> desc student;
+----------+-------------+------+-----+---------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default | Extra? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? |? ? ? ? ? ? ? ? |
| gender? | varchar(10) | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| age? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)
5.給birthday添加默認值為2000-01-01灵莲;
mysql> alter table student modify birthday date default '2000-01-01';
Query OK, 0 rows affected (0.03 sec)
Records: 0? Duplicates: 0? Warnings: 0
改變birthday的默認值:
mysql> desc student;
+----------+-------------+------+-----+------------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default? ? | Extra? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? ? ? |? ? ? ? ? ? ? ? |
| gender? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | 2000-01-01 |? ? ? ? ? ? ? ? |
| age? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
6.給性別字段添加默認值為男;
mysql> set names gbk;
Query OK, 0 rows affected (0.02 sec)
mysql> alter table student modify gender varchar(10) default '男';
Query OK, 0 rows affected (0.04 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc student;
+----------+-------------+------+-----+------------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default? ? | Extra? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? ? ? |? ? ? ? ? ? ? ? |
| gender? | varchar(10) | YES? |? ? | 男? ? ? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | 2000-01-01 |? ? ? ? ? ? ? ? |
| age? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
7.刪除age字段澄者;
mysql> alter table student drop age;
Query OK, 0 rows affected (0.01 sec)
mysql> desc student;
+----------+-------------+------+-----+------------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default? ? | Extra? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? ? ? |? ? ? ? ? ? ? ? |
| gender? | varchar(10) | YES? |? ? | 男? ? ? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | 2000-01-01 |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
9.給班級表插入3個班級笆呆;
mysql> insert into class values(1001,'一班');
Query OK, 1 row affected (0.03 sec)
mysql> insert into class values(1002,'二班');
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(1003,'三班');
Query OK, 1 row affected (0.00 sec)
mysql> select * from class;
+------+-------+
| cid? | cname |
+------+-------+
| 1001 | 一班? ? |
| 1002 | 二班? ? ? |
| 1003 | 三班? ? ? |
+------+-------+
10.在學(xué)生表中給每個班級添加3名學(xué)生信息;
mysql> insert into student values(1,'張三','男','2012-01-02',1001,'cq');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student values(null,'李四','女','2009-03-22',1002,'cq');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student values(null,'王五','男','2009-03-25',1003,'cq');
Query OK, 1 row affected (0.00 sec)
mysql> select *from student;
+-----+-------+--------+------------+------+---------+
| sid | sname | gender | birthday? | cid? | address |
+-----+-------+--------+------------+------+---------+
|? 1 | 張三? ? ? | 男? ? ? | 2012-01-02 | 1001 | cq? ? ? |
|? 2 | 李四? ? ? | 女? ? ? | 2009-03-22 | 1002 | cq? ? ? |
|? 3 | 王五? ? ? | 男? ? ? | 2009-03-25 | 1003 | cq? ? ? |
+-----+-------+--------+------------+------+---------+
8.給學(xué)生表的cid上添加外鍵約束粱挡,以參考class表中的cid字段赠幕;
mysql> alter table student add constraint fk_cid foreign key(cid) references class(cid);
Query OK, 3 rows affected (0.02 sec)
Records: 3? Duplicates: 0? Warnings: 0
受到約束報錯:
mysql>? insert into student values(null,'王五','男','2009-03-25',1004,'cq');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
ails (`c17/student`, CONSTRAINT `fk_cid` FOREIGN KEY (`cid`) REFERENCES `class`
(`cid`))
11.刪除外鍵;
mysql> alter table student drop foreign? key fk_cid;
Query OK, 3 rows affected (0.02 sec)
Records: 3? Duplicates: 0? Warnings: 0
刪除后可以往student繼續(xù)添加學(xué)生信息:
mysql>? insert into student values(null,'王五','男','2009-03-25',1004,'cq');
Query OK, 1 row affected (0.00 sec)
mysql> select *from student;
+-----+-------+--------+------------+------+---------+
| sid | sname | gender | birthday? | cid? | address |
+-----+-------+--------+------------+------+---------+
|? 1 | 張三? ? ? | 男? ? ? | 2012-01-02 | 1001 | cq? ? ? |
|? 2 | 李四? ? ? | 女? ? ? | 2009-03-22 | 1002 | cq? ? ? |
|? 3 | 王五? ? ? | 男? ? ? | 2009-03-25 | 1003 | cq? ? ? |
|? 4 | 王五? ? ? | 男? ? ? | 2009-03-25 | 1004 | cq? ? ? |
+-----+-------+--------+------------+------+---------+
4 rows in set (0.00 sec)
12.復(fù)制student表到student2询筏;
mysql> create table student2 select * from student;
Query OK, 4 rows affected (0.01 sec)
Records: 4? Duplicates: 0? Warnings: 0
mysql> select *from student2;
+-----+-------+--------+------------+------+---------+
| sid | sname | gender | birthday? | cid? | address |
+-----+-------+--------+------------+------+---------+
|? 1 | 張三? ? ? | 男? ? ? | 2012-01-02 | 1001 | cq? ? ? |
|? 2 | 李四? ? ? | 女? ? ? | 2009-03-22 | 1002 | cq? ? ? |
|? 3 | 王五? ? ? | 男? ? ? | 2009-03-25 | 1003 | cq? ? ? |
|? 4 | 王五? ? ? | 男? ? ? | 2009-03-25 | 1004 | cq? ? ? |
+-----+-------+--------+------------+------+---------+
13.將表student2的名字改為stu;
改前所有的表:
mysql> show tables;
+---------------+
| Tables_in_c17 |
+---------------+
| class? ? ? ? |
| student? ? ? |
| student2? ? ? |
+---------------+
改后所有的表:
mysql> show tables;
+---------------+
| Tables_in_c17 |
+---------------+
| class? ? ? ? |
| stu? ? ? ? ? |
| student? ? ? |
+---------------+
14.刪除stu表中sid的自增長榕堰;
mysql> desc stu;
+----------+-------------+------+-----+------------+----------------+
| Field? ? | Type? ? ? ? | Null | Key | Default? ? | Extra? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
| sid? ? ? | int(11)? ? | NO? | PRI | NULL? ? ? | auto_increment |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? ? ? |? ? ? ? ? ? ? ? |
| gender? | varchar(10) | YES? |? ? | 男? ? ? ? ? |? ? ? ? ? ? ? ? |
| birthday | date? ? ? ? | YES? |? ? | 2000-01-01 |? ? ? ? ? ? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? ? ? ? ? ? |
+----------+-------------+------+-----+------------+----------------+
mysql> alter table stu modify sid int;
Query OK, 3 rows affected (0.02 sec)
Records: 3? Duplicates: 0? Warnings: 0
mysql> desc stu;
+----------+-------------+------+-----+------------+-------+
| Field? ? | Type? ? ? ? | Null | Key | Default? ? | Extra |
+----------+-------------+------+-----+------------+-------+
| sid? ? ? | int(11)? ? | NO? | PRI | 0? ? ? ? ? |? ? ? |
| sname? ? | varchar(10) | NO? |? ? |? ? ? ? ? ? |? ? ? |
| gender? | varchar(10) | YES? |? ? | 男? ? ? ? ? |? ? ? |
| birthday | date? ? ? ? | YES? |? ? | 2000-01-01 |? ? ? |
| cid? ? ? | int(11)? ? | YES? |? ? | NULL? ? ? |? ? ? |
| address? | varchar(10) | YES? |? ? | NULL? ? ? |? ? ? |
+----------+-------------+------+-----+------------+-------+
15.刪除stu表;
刪除前:
mysql> show tables;
+---------------+
| Tables_in_c17 |
+---------------+
| class? ? ? ? |
| stu? ? ? ? ? |
| student? ? ? |
+---------------+
mysql> drop table stu;
Query OK, 0 rows affected (0.01 sec)
刪除后:
mysql> show tables;
+---------------+
| Tables_in_c17 |
+---------------+
| class? ? ? ? |
| student? ? ? |
+---------------+
2 rows in set (0.00 sec)