小白的 MySQL 笔记(一)

来自 stackoverflow 的内容居多。

1- MySQL VARCHAR size?

2- 数据库设计范式

3- What is InnoDB and MyISAM in MySQL ?

4- 为什么手写DDL?

5- Data access object (DAO) in Java

MySQL VARCHAR size?

Q:

I‘m wondering, if I have a VARCHAR of 200 characters and that I put a string of 100 characters, will it use 200 bytes or it will just use the actual size of the string?

A:

100 characters.

This is the var (variable) in varchar: you only store what you enter (and an extra 2 bytes to store length upto 65535)

If it was char(200) then you‘d always store 200 characters, padded with 100 spaces

See the docs: "The CHAR and VARCHAR Types"  ------- by gbn

补充:

VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。MySQL4.1以前,VARCHAR数据类型所支持的最大长度255,5.0以上版本支持65535字节长度,utf8编码下最多支持21843个字符(不为空)  ------ 来自百度百科

数据库设计范式

如何能设计出优秀的数据库呢?专家们经过多年研究终于·····  一般按照范式来进行数据库设计就得到良好的数据库,范式的目的在于:消除数据冗余和编程便利。

第一范式就是得到纯二维表, // 只有纯二维的表才能装进数据库

第二范式是消除非主键依赖关系, // “有些列并不直接依赖于主键”,就是说和主键没关系的东西应该扔到另外一张表中去。

第三范式是消除函数依赖关系。// 能算出来的就别额外拿一列装了。。。

做范式的主要手段是“拆表”,但是要它有副作用,······,所以要在数据冗余和编码容易之间寻找平衡点,到了第三范式,基本上就是平衡点了。  ------ 《 Java 就该这样学》

What is InnoDB and MyISAM in MySQL ?

InnoDB and MYISAM, are storage engines for MySQL.

These two differ on their locking implementation: InnoDB locks the particular row in the table, and MyISAM locks the entire MySQL table.

You can specify the type by giving MYISAM OR InnoDB while creating a table in DB.    ------ by Siva

为什么手写 DDL (Data Definition Language)?

schema.sql(demo:

-- 数据库初始化脚本

-- 创建数据库
CREATE DATABASE chat;
-- 使用数据库
use chat;

-- 创建表
CREATE TABLE user(
  user_id BIGINT NOT NULL AUTO_INCREMENT COMMENT ‘用户id‘,
  username VARCHAR(40) NOT NULL COMMENT ‘用户名(邮箱)‘,
  password VARCHAR(40) NOT NULL COMMENT ‘密码‘,
  nickname VARCHAR(20) NOT NULL COMMENT ‘昵称‘,
  other VARCHAR(120) COMMENT ‘其他‘,
  PRIMARY KEY (user_id)
)ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT=‘用户基本信息‘;

CREATE TABLE friend_relation(
  user_id BIGINT NOT NULL COMMENT ‘用户id‘,
  friend_id BIGINT NOT NULL COMMENT ‘好友id‘
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘好友关系表‘;

CREATE TABLE group_relation(
  user_id BIGINT NOT NULL COMMENT ‘用户id‘,,
  group_id BIGINT NOT NULL COMMENT ‘群组id‘
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘群组关系表‘;

-- 初始化数据
INSERT INTO
  ‘user‘(‘username‘, ‘password‘, ‘nickname‘, ‘other‘)
VALUES
  (‘[email protected]‘, 123456, ‘老大‘, ‘这人很懒,啥也没写‘),
  (‘[email protected]‘, 123456, ‘老二‘, ‘平平淡淡才是真‘);

-- INSERT INTO
--   ‘friend_relation‘(‘user_id‘, ‘friend_id‘)
-- VALUES

-- 为什么手写 DDL ( Data Definition Language )
-- 记录每次上线的 DDL 修改
-- 上线 V 1.1
-- xxx
-- 上线 V 1.2
-- xxx x x

MySQL 如果表存在就删掉:

DROP TABLE IF EXISTS tbl_name;

Data access object (DAO) in Java

Q:

I was going through a document and I came across a term called DAO. I found out that it is a Data Access Object. Can someone please explain me what this actually is?

I know that it is some kind of an interface for accessing data from different types of sources, in the middle of this little research of mine I bumped into a concept called data source or data source object, and things got messed up in my mind.

I really want to know what a DAO is programmatically in terms of where it is used. How it is used? Any links to pages that explain this concept from the very basic stuff is also appreciated.  ------ by Vasanth Nag K V

A:

The Data Access Object is basically an object or an interface that provides access to an underlying database or any other persistence storage.

That definition from: http://en.wikipedia.org/wiki/Data_access_object

Check also the sequence diagram here: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

Maybe a simple example can help you understand the concept:

Let‘s say we have an entity to represent an employee:

public class Employee {

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

The employee entities will be persisted into a corresponding Employee table in a database. A simple DAO interface to handle the database operation required to manipulate an employee entity will be like:

interface EmployeeDAO {

    List<Employee> findAll();
    List<Employee> findById();
    List<Employee> findByName();
    boolean insertEmployee(Employee employee);
    boolean updateEmployee(Employee employee);
    boolean deleteEmployee(Employee employee);

}

Next we have to provide a concrete implementation for that interface to deal with SQL server, and another to deal with flat files, etc.  ------ by Rami

时间: 2024-10-16 09:10:20

小白的 MySQL 笔记(一)的相关文章

mysql笔记第三天

一下午在学习mysql,最有价值的就是这一点点 Order by 可以对在select字句中出现的字段位置进行排列eg:select name,count(*) from eg group by name order by 2;;这里2的意思跟为count(*)取一个别名是一样的意思, Join(联结)的用法: 将几个表格进行联结,on后面就是搜索的条件,inner join on内联结,left join on 左联结,right右联结,cross join交叉联结(得到的结果是被连接的两个数

mysql笔记3_存储引擎

表的存储引擎类型: MyISAM:应用于读写操作为主,很少更新.删除.并对事物的完整性.并发性要求不高的情况. InnoDB:应用于对事物的完整性要求高,在并发条件下要求数据一致的情况. Memory:标的数据存放在内存中,访问效率高,但一旦服务关闭,表中的数据全部丢失. Merge:是一组MyISAM表的组合,可以突破对单个MyISAM表大小的限制,提高访问效率. mysql笔记3_存储引擎

mysql笔记1_数据库发展史

数据库发展史 萌芽阶段--文件系统 初级阶段--第一代数据库:网状模型.层次模型的数据库. 中级阶段--第二代数据库:关系型数据库和结构化查询语句. 高级阶段--第三代数据库:“关系-对象”型数据库. 数据库管理系统(DBMS) SQL(Strutured Query Language)结构化查询语言 DDL(Data Definition Language)数据定义语言 DML(Data Management Language)数据操作语言.mysql自动提交(auto commit),Ora

【MySQL笔记】SQL语言四大类语言

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段名表> FROM <表或视图名> WHERE <查询条件> 具体参看:[MySQL笔记]数据库的查询 2 .数据操纵语言DML INSERT - insert data into a table(插入) UPDATE - upda

mysql笔记5_多表连接

多表连接: 交叉连接(笛卡尔积)cross join(基本上无实际意义,避免). 内连接,即等值连接 inner join...on... 左外连接 left join...on...主表的记录全部显示,如果没有记录则补空.连接左边的表作为主表. 右外连接 right join...on...同左外连接. 全外连接 自连接 主表.从表是同一张表. 子查询:为主查询提供查询数据. mysql笔记5_多表连接

mysql笔记4_函数

常用函数: concat 连接函数  Lower 转小写  upper 转大写  Length 长度 substr  子串  now 当前时间  Year 当前年份... 流程函数: ifnull(column,result1,result2) 判定字段为空则返回result2,不为空则result1. case...when...then...else...end 分支语句. 聚合函数: AVG 平均值  sum 求和  MAX 最大值  MIN 最小值  count[distinct] 统计

mysql笔记6_索引

什么是索引? 数据库中的一个对象. 在数据库中用来加速表的查询. 通过使用快速路径访问方法定位数据,减少了磁盘的i/o. 与表分别独立存放,但不能独立存在,必须属于某个表. 由数据库自动维护,表被删除时,该表上的索引自动别删除. 索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引. 怎样创建索引: create index 索引名 on 表名(字段名); 使用索引: where之后加上索引字段即可. 索引原理: 索引页 表 index_name|       loc  

mysql笔记7_视图

视图的作用: 可以限制对数据的访问. 可以使复杂的查询变的简单. 提供了数据的独立性. 提供了对相同数据的不同显示. 创建: create view 视图名 as 查询语句 使用: select * from 视图名 删除: drop view 视图名 mysql笔记7_视图

mysql笔记8_数据库设计步骤

step1: 收集信息,与谈系统有关的人员进行交流.座谈,充分了解数据库需要完成的任务. 示例:blog系统 基本功能:发表和编辑文章,多用户支持,全文检索,RSS支持,图片收藏,管理站内短消息. step2: 标识对象(实体Entity) 标识数据库要管理的关键对象或实体. 实体一般是名词: 博主账号:发表和管理文章.图片管理. 文章类别 文章 文章回复 图片分类 图片 连接分类 连接 短消息 step3: 标识每个实体的属性 E-R图(Entity-Relationship) |     符