【MySql】使用记录<五>
2015-08-11 22:10
591 查看
日期型
mysql> create table t(ya year,dt date,tm time,dm datetime);
mysql> insert into t values(95,’2000-01-03’,’12:12:12’,’1112-02-03 12:12:12’);
Query OK, 1 row affected (0.06 sec)
timestamp 自动更新 时间戳
列的默认值
避免列为NULL,使用NOT NULL default ”
值和value要前后对应;
主键与自增
primary key能够区分每一行的,此列不重复;主键一定不重复,不重复的未必是主键;
与auto_increment通常一起出现,但是不是必须的;只有auto_increment是无法生成表格的;
primarty key 和key都是可以的;
id int primary key; // primarty key(id); 语法相同
自增浪费资源,在oracle中是没有的;
案例
所有列,都定长,可以极大提高查询速度.
如何导入外部.sql语句
删除表
更改表名
更改属性表
删除列
视图view
view被称为虚拟表,view是sql的查询结果。查view就相当于查sql语句表。
1.能够权限控制;【只允许某几个列给客户查询】
2.可以开放几列;
3.简化复杂的查询;
4.如何区分表和视图?【视图能不能更新和删除?视图存放到哪里?】
==>更改表必将影响视图的查询结果;
如果虚拟表和表完全是一对一的话,就会相互影响!反之无法更改视图表!【关键看能否映射回去】
视图algorithm
对于简单查询形成的view,再对view查询是【where,order by】等,可以把建视图的语句+查视图的语句==合并==>查物理表 ====>这种视图的算法叫merge(合并);
视图的语句比较复杂,很难再和查询语句合并,mysql可以先创建语句把结果集形成内存中的临时表,然后再查临时表====>这种视图的算法叫temptable
[code]Year 年(1字节) 95/1995, [1901-2155], 在insert时,可以简写年的后2位,但是不推荐这样. [00-69] +2000 [70-99] + 1900, 即: 填2位,表示 1970 - 2069 Date 日期 1998-12-31 范围: 1000/01/01 ,9999/12/31 Time 时间 13:56:23 范围: -838:59:59 -->838:59:59 datetime 时期时间 1998-12-31 13:56:23 范围: 1000/01//01 00:00:00 ---> 9999:12:31 23:59:59
mysql> create table t(ya year,dt date,tm time,dm datetime);
[code]mysql> select * from t; +------+------+------+------+ | ya | dt | tm | dm | +------+------+------+------+ | 1901 | NULL | NULL | NULL | +------+------+------+------+ 1 row in set (0.00 sec)
mysql> insert into t values(95,’2000-01-03’,’12:12:12’,’1112-02-03 12:12:12’);
Query OK, 1 row affected (0.06 sec)
[code]mysql> select * from t; +------+------------+----------+---------------------+ | ya | dt | tm | dm | +------+------------+----------+---------------------+ | 1901 | NULL | NULL | NULL | | 1995 | 2000-01-03 | 12:12:12 | NULL | | 1995 | 2000-01-03 | 12:12:12 | 1112-02-03 12:12:12 | +------+------------+----------+---------------------+
timestamp 自动更新 时间戳
[code]时间戳: 是1970-01-01 00:00:00 到当前的秒数. 一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳. 因为datetime虽然直观,但计算不便.
列的默认值
避免列为NULL,使用NOT NULL default ”
值和value要前后对应;
主键与自增
primary key能够区分每一行的,此列不重复;主键一定不重复,不重复的未必是主键;
与auto_increment通常一起出现,但是不是必须的;只有auto_increment是无法生成表格的;
primarty key 和key都是可以的;
id int primary key; // primarty key(id); 语法相同
自增浪费资源,在oracle中是没有的;
案例
所有列,都定长,可以极大提高查询速度.
[code]主键 用户名 性别 体重(KG) 生日 工资 上次登陆 个人简介 id Username gender weight birth salary Lastlogin intro 列名称 列类型 默认值 是否主键 Id Int unsigned PRI Username Varchar(20) '' gender Char(1) /tinyint/enum(男/女) weight Tinyint unsigned Birth Date Salary Decimal(8,2) lastlogin Datetime intro Varchar(1500) 这张表不够好,可以优化 分析:这张表除了username/intro列之外,每一列都是定长的. 我们不妨让其所有列,都定长,可以极大提高查询速度. 列名称 列类型 默认值 是否主键 Id Int unsigned PRI Username char(20) '' gender Char(1) /tinyint weight Tinyint unsigned Birth Date Salary Decimal(8,2) lastlogin Int unsigned Username char(10) 是会造成空间的浪费,但是提高的速度,值. Intro char(1500) 却浪费的太多了,另一方面,人的简介,一旦注册完,改的频率也并不高. 我们可以把 intro列单独拿出来,另放一张表里. 列名称 列类型 默认值 是否主键 Id Int unsigned PRI Username char(20) '' intro Varchar(1500) 在开发中,会员的信息优化往往是 把频繁用到的信息,优先考虑效率,存储到一张表中. 不常用的信息和比较占据空间的信息,优先考虑空间占用,存储到辅表中.
如何导入外部.sql语句
[code]mysql> source D:/Program Files/mys.sql; Query OK, 0 rows affected (0.41 sec) Query OK, 0 rows affected (0.40 sec) //注意:不要加引号; 也可以: c:\windows>cd c:\akura\Db Scripts c:\akura\Db Scripts>mysql -u root -p root mysql>\. EXECUTER_NEW_USER.sql here EXECUTER_NEW_USER.sql my file name //使用.\的方式导入,source属于linux中的语句
删除表
[code]drop table命令用于删除数据表。 drop table命令格式:drop table <表名>; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass;
更改表名
[code]mysql> rename table t3 to t5; Query OK, 0 rows affected (0.21 sec) 或者: mysql> alter table t5 rename to t3; Query OK, 0 rows affected (0.26 sec)
更改属性表
[code]mysql> alter table t3 -> add height tinyint unsigned not null default 0; Query OK, 0 rows affected (0.78 sec) Records: 0 Duplicates: 0 Warnings: 0 //默认在表后 可以使用after 更改列属性: mysql> alter table t3 change weight tizhong smallint; Query OK, 0 rows affected (0.62 sec) Records: 0 Duplicates: 0 Warnings: 0 modify只能更改数据类型 不能更改列名 mysql> alter table t3 modify tizhong int; Query OK, 0 rows affected (0.59 sec) Records: 0 Duplicates: 0 Warnings: 0
删除列
[code]mysql> alter table t3 drop column height; Query OK, 0 rows affected (0.51 sec) Records: 0 Duplicates: 0 Warnings: 0
视图view
view被称为虚拟表,view是sql的查询结果。查view就相当于查sql语句表。
1.能够权限控制;【只允许某几个列给客户查询】
2.可以开放几列;
3.简化复杂的查询;
4.如何区分表和视图?【视图能不能更新和删除?视图存放到哪里?】
==>更改表必将影响视图的查询结果;
如果虚拟表和表完全是一对一的话,就会相互影响!反之无法更改视图表!【关键看能否映射回去】
[code]mysql> create view vgood as select cat_id,goods_id,goods_name,(market_price-shop_price)as sheng from goods; Query OK, 0 rows affected (0.19 sec) //vgood为view的表名
视图algorithm
对于简单查询形成的view,再对view查询是【where,order by】等,可以把建视图的语句+查视图的语句==合并==>查物理表 ====>这种视图的算法叫merge(合并);
视图的语句比较复杂,很难再和查询语句合并,mysql可以先创建语句把结果集形成内存中的临时表,然后再查临时表====>这种视图的算法叫temptable
相关文章推荐
- MySQL 数据库ut8mb4字符集
- 5步轻松搞定windows系统下mysql命令行操作,完成简单mysql配置
- MySQL的分页
- MySQL建议列属性尽量为NOT NULL
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- Unity3D 连接MySQL数据库笔记4-Unity3d代码
- MYSQL隔离级别介绍
- what-to-tune-in-mysql-56-after-installation.html
- Mysql全文本检索-MyISM引擎,Where子句中使用Match() Against()-布尔模式
- 数据库MySQL操作
- mysql中如何复制一行数据
- 修改mysql的默认存储引擎为InnoDB
- 通过saltstack源码安装mysql
- MySQL必知必会笔记(六)插入数据 创建和操纵表
- mysql主从灾备
- mysql当中时间类型是如何存储的
- Mysql组合查询-UNION-多个SELECT语句作为单个查询结果返回
- mysql备份
- mysql 不能登录
- JDBC+MySql 1(编码问题的处理)