对于MySqL而言,关键字大小写都可以,但规范来说,关键字是全大写。
从用户和权限开始:
创建用户:
CREATE USER 'name'@'192.168.1.1' IDENTIFIED BY '123123' CREATE USER 'name'@'192.168.1.%' IDENTIFIED BY '123123' CREATE USER 'name'@'%' IDENTIFIED BY '123123' name部分是用户名,‘192.168.1.1’代表用户登录设备的IP地址限制,%符号代表任意地址,123123表示密码
用户权限:
SHOW GTANTS FOR 'NAME'@'%'; 查看权限
GRANT SELCET,UPDATE,INSERT ON database_name.table_name TO 'name'@'%';授权
REVOKE SELCET,UPDATE ON database_name.table_name FROM 'name'@'%'; 取消授权
连接数据库:
window: mysql -u root -p 退出:exit,quit 然后输入密码 liunx: 安装数据库:yum install mysql-server 服务端启动 :mysql.server start 客户端连接:mysql -h host -u user -p 退出: QUIT 或者 Control+D
选择数据库 USE data_name;
创建数据库
CRETER DATABASE data_name;
DROP DATABASES date_name;
表的操作:
1 创建表
CREATE TABLE ''table_name''(参数);参数格式:‘列名’ 关键字,
举例:
create table student(id int auto_increment primary key,name char(20) not null,classid int not null ) engine=innodb default charset=utf8;
对于列名关键字有 null /not null auto-increment primary key ,等
主键:
主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
create table tb1(
nid int not null auto_increment primary key,
num int null
)
或
create table tb1(
nid int not null,
num int not null,
primary key(nid,num)
)
外键:
外键,一个特殊的索引,只能是指定内容
creat table color( nid int not null primary key, name char(16) not null )
create table fruit( nid int not null primary key, smt char(32), color_id int not null, constraint fk_cc foreign key(color_id)references color(nid)
2插入表的值:
insert into class(列名,列名) vlaues(,);
3清空表:
delete from 表名;
TRUNCATE TABLE 表名;
4修改表
ALTER TABLE 表名 ADD (列名,type)
ALTER TABLE 表名 DROP (列名,type)
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
5 数据类型:
bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认m=1 tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 ~ 127. 无符号: 0 ~ 255 特别的: MySQL中无布尔值,使用tinyint(1)构造。 int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围: 有符号: -2147483648 ~ 2147483647 无符号: 0 ~ 4294967295 特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002 bigint[(m)][unsigned][zerofill] 大整数,数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808 ~ 9223372036854775807 无符号: 0 ~ 18446744073709551615 decimal[(m[,d])] [unsigned] [zerofill] 准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。 特别的:对于精确数值计算时需要用此类型 decaimal能够存储精确值的原因在于其内部按照字符串存储。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 无符号: -3.402823466E+38 to -1.175494351E-38, 0 1.175494351E-38 to 3.402823466E+38 有符号: 0 1.175494351E-38 to 3.402823466E+38 **** 数值越大,越不准确 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 无符号: -1.7976931348623157E+308 to -2.2250738585072014E-308 0 2.2250738585072014E-308 to 1.7976931348623157E+308 有符号: 0 2.2250738585072014E-308 to 1.7976931348623157E+308 **** 数值越大,越不准确 **** char (m) char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。 PS: 即使数据小于m长度,也会占用m长度 varchar(m) varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。 注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡 插入数据时格式是 insert into 表名 values('数据') text text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。 mediumtext A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. longtext A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters. enum 枚举类型, An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); set 集合类型 A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') YEAR YYYY(1901/2155) DATETIME
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
insert into 表名 values('9999-12-31 23:59:59')
TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时) 复制代码
表内数据的操作:
1增加
INSERT INTO 表名 (列名,列名) VALUSE (数据,数据);
INSERT INTO 表名(列名,列名)VALUES (数据,数据),(数据,数据),(数据,数据);
INSERT INTO 表名(列名,列名)SELECT 列名,列名 FROM 表名;
2删除
DELETE FROM 表名;清空表
DELETE FROM 表名 WHERE 条件:按条件删除选中的行
3修改
UPDATE 表名 SET 列名=数据,列名=数据 WHERE 条件;
4查看
SELECET 语句后面可以根据不同需求组合各种语句
SELECT 列名,列名 FROM 表名 WHERE 条件 LIMIT 参数,参数; LIMIT实现分页,第一个参数是startpage,第二个是step。
SELECT 列名,列名 FROM 表名 WHERE 列名 in 条件;
SELECT 列名,列名 FROM 表名 WHERE 列名 not in 条件 ;
SELECT 列名,列名 FROM 表名 WHERE 条件 or 条件 ;
SELECT 列名,列名 FROM 表名 WHERE 条件 between 条件;
SELECT 列名,列名 FROM 表名 ORDER BY 列名 ASC/DESC ; ASC是顺序排序,DESC是逆序排序。可以按单列排也可以多列排。
SELECT 列名 FROM 表名 WHERE 列名 LIKE ‘a&’ ; &表示若干个任意字符
SELECT 列名 FROM 表名 WHERE 列名 LIKE ‘a_’ _代表一个任意字符
SELECT MAX(列名) FROM 表名; 取最大值
SELECT MIN(列名) FROM 表名; 取最小值
SELECT COUNT(列名) FROM 表名; 计数
SELECT AVG(列名) FROM 表名; 平均数
SELECT 列名 FROM 表名 GROUP BY 列名; 分组
SELECT * FROM 表名,表名 WHERE 表名.列名=表名.列名; 连表
SELECT * FROM 表名 LEFT JOIN 表名 ON 表名.列名=表名.列名; 连表,左边的表全显示
SELECT * FROM 表名 RIGHT JOIN 表名 ON 表名.列名=表名.列名; 连表,右边的表全显示
使用数据库的注意事项:
- 避免使用select *
- count(1)或count(列) 代替 count(*)
- 创建表时尽量时 char 代替 varchar
- 表的字段顺序固定长度的字段优先
- 组合索引代替多个单列索引(经常使用多个条件查询时)
- 尽量使用短索引
- 使用连接(JOIN)来代替子查询(Sub-Queries)
- 连表时注意条件类型需一致
- 索引散列值(重复少)不适合建索引,例:性别不适合
mysql面试问题:
http://www.cnblogs.com/ctztake/articles/8541948.html