您的位置:首页 > 数据库 > MySQL

0227mysql基本应用

2011-03-10 09:16 176 查看
\d,delimiter 改变结束符
\#,rehash
\c
\g
\G
\q
\?
help

help keyword

数据库对象:
数据库

字段
索引
视图
触发器
事件
存储过程
存储函数
用户

表:
关系的描述,关系的实现
CREATE TABLE tb_name (
filed_name data_type,
...
);

ALTER TABLE tb_name CHANGE old_fileld new_filed data_type (FIRST|AFTER some_filed)
ALTER TEBLE tb_name MODIFY filed data_type 改变字段定义
ALTER TEBLE tb_name ADD new_filed data_type 添加字段
ALTER TABLE tb_name DROP filed 删除字段

ALTER TABLE tb_name RENAME new_tb_name
RENAME TABLE tb_name TO new_tb_name

存储引擎
MyISAM 默认的,不支持事务,表级别锁,在线备份
InnoDB 支持事务,行级别锁,粒度小,
Aechive 归档存储,不支持索引,可以压缩
Federated 组合表,跨数据库组合表
MRG 同一个库中组合表
Blackhole 黑洞,复制时有用
CSV 用于实现非SQL格式数据库的转换,使用纯文本文件存储数据
Cluster NDB
类似BDB,运行在内存中 在集群中使用

use 数据库名 (设置当前默认数据库)

******linux 数据库中不支持check约束******

改存储引擎时如果有数据则非常危险

定义外键,要先修改存储引擎为INNODB,如果在MYISAM中定义了外键,是不起作用的

建议同一个库中所有表的存储引擎改为一样

SHOW TABLE STATUS\G (查看表使用的是什么存储引擎)

ALTER TABLE stu ENGINE=INNODB;
ALTER TABLE course ENGINE=INNODB;

最直接的方式是在创建表时指定存储引擎的类型,向下面这样:

CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB

你还可以改变现有的表使用的存储引擎,用以下语句:

ALTER TABLE mytable ENGINE = MyISAM

然而,你在以这种方式修改表格类型的时候需要非常仔细,因为对不支持同样的索引、字段类型或者表大小的一个类型进行修改可能使你丢失数据。如果你指定一个在你的当前的数据库中不存在的一个存储引擎,那么就会创建一个MyISAM(默认的)类型的表。

ON DELETE 定义被引用的表被删除了怎样处理此表(有外键时)
CASXADE
RE

SHOW DATABASES;

IF NOT EXISTS 避免在脚本中创建表时报错

INSERT
INCERT INTO students(sid,sname) VAUES

DELETE where
UPDATE where
SELECT

TRUNCATE TABLE students 清空表,并清空计数

REPLACE 先删除,再添加

%多个字符
_一个字符

distinct 消除多余行

having 是对group by 分组后的再限定

或,异或问题

在逻辑学中,逻辑算符 异或(符号为XOR或EOR或⊕)是对两个运算元的一种逻辑析取类型。但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真[1]。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”

两个运算元(命题):A与B的异或一般写成A异或B,或者写成AXORB等等。在C语言中,写作A^B。

limit 2,3 (绕过前2行,再显示3行)

SHOW CREATE TABLE t1\G 显示创建表的命令
SHOW TABLE STATUS 查看表的信息

use information—schema
DESC TABLES;
SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,

ALTER TABLE labrary.t1 ENGINE=NEMORY 改变存储引擎

外键:
FOREIGN KEY () REFERENCES table(field) ON DELETE SET NULL

CREATE TABLE stu (
name CHAR(6) NOT NULL,
age TINYINT UNSIGNED NOT NULL, TINYINT 3bit UNSIGNED 无符号
gendir CHAR(1),
PRIMARY KET(name,gender)
);

ALTER TABLE stu MODIFY gender CHAR(1) NOT NULL DEFAULT 'm';
ALTER TABLE stu ADD course TINYINT UNSIGNED DEFAULT '2';

CREATE TBALE course (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
course VARCHAR(255) NOT NULL DEFAULT 'mysql',
startdate DATE NOT NULL DEFAULT '2010-12-01'
);

ALTER TABLE stu ENGINE=INNODB;
ALTER TABLE course ENGINE=INNODB;
ALTER TABLE stu ADD FOREIGN KEY(course) REFERENCES course(id);

CREATE TABLE IF NOT EXISTS stu ( name VARCHAR(30));
SHOW WARNINGS;

CHECKSUM 1 对表做校验
COMMENT '*****' 对表加注释信息
DELAY_KEY_WRITE 延迟索引更新

CREATE TABLE course2 SELECT * FROM course WHERE id < 100;
表复制,auto_increment属性不会复制
CREATE TABLE course3 LIKE course;
创建一个结构属性和course完全相同的表

表中插入数据:
INSERT [INTO] tb_name VALUES (value1,val2,...),(val1,val2,...),(val1,val2,...)
INSERT INTO cource(course,startdate) VALUES('appache','2011-01-01');
SELECT * FROM course;
INSERT INTO course(course) VALUES('ftp'),('www'),('ssh');
INSERT INTO course(course,startdate) VALUES('appache','2011-01-01'); 如果不定义唯一键,那么数据可以重复

TRUNCATE TABLE cource; 清空表

唯一键:
ALTER TABLE course ADD UNIQUE KEY(course);
INSERT INTO course(course,startdate) VALUES('appache','2011-01-01'); 会提示出错

替换数据:
REPLACE INTO course(course,startdate) VALUES('appache','2011-01-01');

INSERT INTO course3 SELECT * FROM course;

为某一字段设置某一值:
INSERT INTO course SET course='telnet';

更新字段:
UPDATE course SET id=2 WHERE course='www';
UPDATE course SET id=id-1 ORDER BY id LIMIT 3; 根据id排序,只改前三行

删除字段:
DELETE FROM course WHERE id=1;

查询:
SELECT * FROM course;
SELECT course AS COURSE FROM course;
SELECT VERSION() AS VER;
SELECT course AS COURSE FROM course WHERE id>3;
SELECT * FROM course WHERE id>1 AND id<4;
SELECT * FROM course WHERE id BETWEEN 1 AND 4;
SELECT * FROM course WHERE id IN (1,2,3);
SELECT * FROM course WHERE course LIKE 'w%'; 匹配%多个字符
SELECT * FROM course WHERE course LIKE 'w_w'; 匹配_单个字符
SELECT DISTINCT startdate FROM course; 结果中如果有重复值时,只显示一次
SELECT DISTINCT startdate FROM course ORDER BY id;
SELECT DISTINCT startdate FROM course ORDER BY startdate;
SELECT DISTINCT startdate FROM course ORDER BY startdate DESC;
SELECT * FROM course GROUP BY startdate;
SELECT startdate FROM course GROUP BY startdate HAVING COUNT(*)>1;
SELECT COUNT(*) FROM course;
SELECT * FROM course ORDER BY id LIMIT 2;
SELECT * FROM course ORDER BY id LIMIT 2,2; 2,2 绕过前两行,再显示两行
SELECT * FROM course ORDER BY id DESC LIMIT 2;
(SELECT * FROM course ORDER BY id DESC LIMIT 2) UNION (SELECT * FROM course3 ORDER BY id LIMIT 2) ORDER BY id; 两个查询结果连接显示

SELECT
DISTINCT
ORDER BY
LIMIT
GROUP BY
HAVING

多表查询

内连接 =

外连接:左外连接;右外连接

A LEFT JONE B =
A RIGHT JONE B =

自连接

INNER JONE

子查询
where中有“ IN ” “ = ” 两种;还可以在from中用子查询,但是要为子查询结果取别名

where EXISTS ( select ……)

view ,视图
虚表,基表

CREAT VIEW DBname AS SELECT语句

视图可以更新,基表也跟着更新

WITH CHECK OPTION

索引:

创建索引:在创建表时创建索引

alter table db ADD INDEX index_name ( )

三种索引
BTREE|RTREE|HASH|FULLTEXT

不同的存储引擎支持哪些索引???作业

事务:transaction
一大堆语句的组合,而被看做一个整体

ACID:
原子性,
一致性,
隔离性, 事务隔离级别,四个级别
持久性

MyISAM,基于表级别的锁
InnoDB,行级别

读锁,写锁

set

隔离级别:四个

读未提交:没有提交,别人就可以读取
读提交:只有提交,别人才可以读取
重读: 当我的事务没有结束,无论别人怎样改,我读的结果都一样,是第一眼看到的
串行化:当别人在修改的时候不读取,等修改完成后再读取

要先确定是否基于事务的引擎,建议:一个数据库的所有表都是用同一存储引擎

加锁:读锁是共享的,写锁是独占的。写锁优先级高

读锁,我读的时候,不允许别人写入修改

在linux主机上装上oracle
内存1G,独立分区50G

本文出自 “Stephen” 博客,请务必保留此出处http://stephenzhao.blog.51cto.com/2515860/511492
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: