a.數據庫的操作: 操作對象的屬性需要標識:database;table...
* create database 庫名(純小寫);//在Mysql中新建一個數據倉庫
* show databases;//顯示Mysql中所有數據庫
* drop database 庫名;//直接刪除掉該數據庫
* use 庫名;//在新建表之前一定要選擇操作哪個數據庫
b.數據表的創建:(create)
* use 庫名;//在新建表之前一定要選擇操作哪個數據庫
* create table 表名(
列名1(英文) 列的類型 約束,//字符串的類型不是String 是varchar(30)
列名2(英文) 列的類型 約束,
);
* show tables;//看的是當前數據庫的所有表
* drop table 表名;//刪除表的結構
c.主鍵與外鍵與自動增長
主鍵:唯一,作爲列的主鍵該列的數據不能重複
自動增長:作爲自動增長的列,不用我們手動插入數據,由數據庫來維護
外鍵:
Test1表 A列 B列
Test2表 B列 C列//在B列中加一個外鍵約束引用Test1表B列
Test2表中B列的取值必須是Test1表中B列中的數據
4.向表中插入數據(insert into...values...)
* INSERT INTO gjp_sort (sid,sname,parent,sdesc) VALUES //既寫列名也寫該列對應的值
(1,'工資收入','收入','我就喜歡發工資')
-- 寫入數據的方式,是推薦
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //如果有自動增長列,可以不用手動插入值
('基金收入','收入','我買了點基金')
* INSERT INTO gjp_sort VALUES //一個列名都不寫,值默認從表左側開始,都要插入
(3,'旅遊支出','支出','黃金週旅遊')
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //可以批量插入值
('基金收入','收入','我買了點基金'),
('喫飯支出','支出','下館子')
5.修改表結構(Alter)(瞭解,一般不建議在建好表上修改表結構)
6.修改表中的數據(Update...set...)
* update 表名 set 字段1=字段值,字段2=字段值 [where 修改條件]//[]代表可選
7.刪除表中的數據(delete from):
drop是刪除結構(數據庫結構和表結構,結構刪完,數據也沒了)
delete是刪除數據
* delete from 表名 [where 刪除條件]
8.查詢表中的數據庫(select...from...)
select * from 表名//查詢該表中所有列的數據
select 列名1,列名2... from 表名//查詢出指定列的數據
select distinct 列名 from 表名//將指定的列的數據去除重複 distinct 有區別的
select 列名1 as '別名',列名2 as '別名',.... from 表名//將查詢結果中的列起一個別名,但是原表中的列名不變
9.對錶的字段(數值字段)進行排序
select 列名1,列名2... from 表名 order by 列名 [ASC/DESC]//ASC 升序(默認); desc 降序
10.聚合函數:
a.count函數
統計該表一共有多少行:
select count(*) from 表名 [where 篩選條件] 一般可用於統計人數
統計該列一共有多少條數據:(不包含值爲NULL列)
select count(列名) from 表名 [where 篩選條件]
b.sum函數
select sum(列名) from 表名 [where 篩選條件] //將該列數據相加
c.avg函數
select avg(列名) from 表名 [where 篩選條件] //將該列數據 相加÷該列一共有多條
11.group by語句
a.group by 後面跟單列
//以gjp數據庫的gjp_ledger爲例
SELECT COUNT(*) as 'num',pstudy FROM person GROUP BY pstudy //pstudy列合併同類項後分組顯示,同類項總數由count聚合
SELECT SUM(money),parent FROM gjp_ledger GROUP BY parent;//以parent列分組
//將parent列中parent值相同的合併爲一組(支出組,收入組)
//分別對支出組和收入組進行money的求和
b.group by後面跟多列
SELECT SUM(money),parent,account FROM gjp_ledger GROUP BY parent,account //將parent與account組合相同的分爲一組
//parent與account有多少種組合,最終就有多少組
//一般來說group by 後面跟的列 和select 後面查詢的列一一對應
//否則數據無意義
c.having子句:
SELECT SUM(money)AS 'sumMoney',parent FROM gjp_ledger GROUP BY parent
HAVING sumMoney >= 20000//HAVING之和group by 聯合使用,having是對分組後的結果進行過濾
爲什麼sql裏面not in後面的子查詢如果有記錄爲NULL的,主查詢就查不到記錄???原因很簡單:
SELECT *
FROM dbo.TableA AS a
WHERE a.id NOT IN ( 2, NULL )
–等同於:
SELECT *
FROM Table_A AS a
WHERE a.id <> 2
AND a.ID <> NULL
由於NULL值不能參與比較運算符,導致條件不成立,查詢不出來數據。
在MySQL中我們對數據表字段的修改命令使用alter
常用的方法
1.增加一個字段
alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一個字段,默認爲空
alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一個字段,默認不能爲空
2.刪除一個字段
alter table user DROP COLUMN new2; //刪除一個字段
3.修改一個字段
alter table user MODIFY new1 VARCHAR(10); //修改一個字段的類型
alter table user CHANGE new1 new4 int; //修改一個字段的名稱,此時一定要重新
//主鍵
alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一個新列
alter table t2 add d timestamp;
alter table infos add ex tinyint not null default ‘0′;
//刪除列
alter table t2 drop column c;
//重命名列
alter table t1 change a b integer;
//改變列的類型
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default ‘0′;
//重命名錶
alter table t1 rename t2;
加索引
mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);
加主關鍵字的索引
mysql> alter table tablename add primary key(id);
加唯一限制條件的索引
mysql> alter table tablename add unique emp_name2(cardnumber);
刪除某個索引
mysql>alter table tablename drop index emp_name;
增加字段:
mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字段名稱及類型:
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
刪除字段:
mysql> ALTER TABLE table_name DROP field_name;
mysql修改字段長度
alter table 表名 modify column 字段名 類型;
例如
數據庫中user表 name字段是varchar(30)
可以用
alter table user modify column name varchar(50) ;