数据库
数据库是将大量数据组织起来,以便高效访问的数据集合(DB)
用来管理数据库的软件叫做数据库管理系统(DBMS)
SQL语句
SQL是为操作数据库而开发的语言。国际标准化组织(ISO)为 SQL 制定了相应的标准,以此为基准的SQL 称为标准 SQL。完全基于标准 SQL 的 RDBMS 很少,通常需要根据不同的 RDBMS 来编写特定的 SQL 语句。
SQL语句要以分号 ; 结尾
SQL 不区分关键字的大小写,但是插入到表中的数据是区分大小写的
win系统默认不区分表名及字段名的大小写
linux / mac 默认严格区分表名及字段名的大小写
1.数据定义
数据库和表命名需要服从规范:
只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称
名称必须以半角英文字母开头
- create
-- 创建名为shop的数据库
CREATE DATABASE shop;
-- 创建名为product的表
CREATE TABLE product
(product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER ,purchase_price INTEGER ,regist_date DATE ,PRIMARY KEY (product_id));-- NOT NULL是非空约束,即该列必须输入数据。-- PRIMARY KEY是主键约束,代表该列是唯一值,可以通过该列取出特定的行的数据。-- VARCHAR用来存储可变长度字符串,相比于CHAR定长字符串会节省空间。
需要先用use dbname;
指定数据库,才能进一步在里面建表,否则会报错ERROR 1046 (3D000): No database selected
- alter
-- 添加一列可以存储100位的可变长字符串的 product_name_pinyin 列
ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
-- 删除 product_name_pinyin 列
ALTER TABLE product DROP COLUMN product_name_pinyin;
ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复
- drop
-- 删除名为shop的数据库
DROP TABLE product;
删除的表是无法恢复的请执行删除操作时无比要谨慎
2.数据操纵
- insert
-- 包含列清单
INSERT INTO ProductIns (product_id, product_name, product_type,
sale_price, purchase_price, regist_date)
VALUES ('0005', '高压锅',
'厨房用具', 6800, 5000, '2009-01-15');
-- 省略列清单
INSERT INTO ProductIns
VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
原则上,执行一次 INSERT 语句会插入一行数据。插入多行时,通常需要循环执行相应次数的 INSERT 语句。其实很多 RDBMS 都支持一次插入多行数据。
-- 通常的INSERT
INSERT INTO ProductIns VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11');
INSERT INTO ProductIns VALUES ('0003', '运动T恤',
'衣服', 4000, 2800, NULL);
INSERT INTO ProductIns VALUES ('0004', '菜刀',
'厨房用具', 3000, 2800, '2009-09-20');
-- 多行INSERT ( DB2、SQL、SQL Server、 PostgreSQL 和 MySQL多行插入)
INSERT INTO ProductIns VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', ?'厨房用具', 3000, 2800, '2009-09-20');
还可以向表中插入默认值(初始值)。可以通过在创建表的CREATE TABLE 语句中设置DEFAULT约束来设定默认值。
CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
(略)
sale_price INTEGER
(略) DEFAULT 0, -- 销售单价的默认值设定为0;
PRIMARY KEY (product_id));
- update
使用 update 时要注意添加 where 条件,否则将会将所有的行按照语句修改
-- 修改所有的注册时间
UPDATE productSET regist_date = '2009-10-10';
-- 仅修改部分商品的单价
UPDATE productSET sale_price = sale_price * 10WHERE product_type = '厨房用具';
对某列赋空值
-- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL
UPDATE productSET regist_date = NULLWHERE product_id = '0008';
UPDATE 语句的 SET 子句支持同时将多个列作为更新对象。
-- 基础写法,一条UPDATE语句只更新一列
UPDATE productSET sale_price = sale_price * 10WHERE product_type = '厨房用具';
UPDATE productSET purchase_price = purchase_price / 2WHERE product_type = '厨房用具';
-- 合并后的写法
UPDATE productSET sale_price = sale_price * 10,purchase_price = purchase_price / 2WHERE product_type = '厨房用具';
练习题
- 1.1
create table Addressbook (
regidt_no integer not null,
name varchar(128) not null,
address varchar(256) not null,
tel_no char(10) ,
mail_address char(20),
primary key (regist_no));
- 1.2
alter table Addressbook
add columns postal_code char(8) not null;
- 1.3
drop table Addressbook;
- 1.4
使用drop删除的表不能恢复,只能重建
Task01 初识数据库